59422 Commits
Author SHA1 Message Date
Paweł Gronowski a403810cbc ci/validate-milestone: Use the branch status issue for next versions
Read the next version for the PR's base branch from the
"docker-versions" block of the pinned branch status issue instead of
releases/versions.yaml, so updating milestones no longer needs a PR on
every branch.

Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
2026-10-29 14:58:14 +01:00
Paweł Gronowski 5e1a5a88a5 daemon/config: Group extension settings under extensions
Move extension directories and per-extension configuration into the
extensions object in daemon.json.

Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
2026-10-29 14:20:59 +01:00
Paweł Gronowski 6f97760380 Merge pull request #53630 from vvoland/work-api
api: Move to OpenAPI 3.2 spec
2026-10-29 13:03:07 +01:00
Paweł Gronowski f2395eeaff api/scripts: Always rerun the Swagger projection check
The Go test cache does not recheck files outside the module root, so
editing only openapi.yaml or swagger.yaml could reuse a cached
TestCheckedInSwagger result and miss a stale projection in a
persistent development container.
Pass -count=1 to disable caching.

Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
2026-10-29 11:34:27 +01:00
Paweł Gronowski dc0ad36c06 api: Declare tar content as a build request body media type
Move application/x-tar from the Content-type header parameter to the
POST /build request body's content map alongside
application/octet-stream. This matches the content type sent by the Go
client and lets OpenAPI consumers discover both supported body media
types.

Regenerate Swagger with both media types in consumes.

Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
2026-10-29 11:34:26 +01:00
Paweł Gronowski 9e5299c63e api: Generate Swagger compatibility output from OpenAPI
Add a Go converter in a separate tooling module and reintroduce
swagger.yaml as generated Swagger 2.0 output. Preserve schema property
order, examples, and generator extensions, and reject unsupported
constructs. Use the union of response media types for Swagger's
operation-wide produces lists.

Leave historical versioned specifications and generated Go models
unchanged.

Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
2026-10-29 11:34:26 +01:00
Paweł Gronowski b82d27f320 api: Add copy of old swagger.yaml
Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
2026-10-29 11:34:26 +01:00
Paweł Gronowski 666eb7d77b api: Convert the API specification to OpenAPI 3.2
Move reusable schemas into components and describe request bodies and
response media types using OpenAPI 3.2 with the OpenAPI 3.1 schema
dialect. Preserve schema property order, reference annotations,
examples, custom formats, and Go generator extensions.

Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
2026-10-29 11:34:26 +01:00
Paweł Gronowski 02baf58963 api: Rename the API specification to openapi.yaml
Keep the contents unchanged so Git can follow the hand-maintained
specification across the rename. Convert the document and reintroduce
swagger.yaml as generated compatibility output in subsequent commits.

Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
2026-10-29 11:34:26 +01:00
berce 7dcd61b4a8 client: end the otelhttp span after a successful hijack
setupHijackConn only closed the response body when the upgrade failed.
otelhttp ends its client span when the body is closed, so the span of
every successful ContainerAttach, ContainerExecAttach and DialHijack
call was never ended. A 101 response has no body, so closing it does not
touch the hijacked connection.

Signed-off-by: berce <75228263+bercedev@users.noreply.github.com>
Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
2026-10-29 11:29:10 +01:00
Sebastiaan van Stijn 6721b5229b Merge pull request #54048 from vvoland/work-rootless
overlay2: Allow rootless mode with SELinux enabled
2026-10-29 09:59:40 +01:00
Sebastiaan van Stijn 8e8a8a5756 vendor: github.com/klauspost/compress v1.20.2
includes a fix for CVE-2026-116591 / [GHSA-fpmh-frq8-7rj8]

full diff: https://github.com/klauspost/compress/compare/v1.20.1...v1.20.2

[GHSA-fpmh-frq8-7rj8]: https://github.com/klauspost/compress/security/advisories/GHSA-fpmh-frq8-7rj8

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-10-28 23:19:28 +01:00
Paweł Gronowski dda2877a6c Add an extension point for watching container state
Jobs extensions need to know when a container finishes so they can
record the outcome of a run.

Add org.mobyproject.extension.container.state.v0.
Its Wait call returns once the container reaches a requested status,
and Watch streams every status change until the container is removed.

Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
2026-10-28 15:56:21 +01:00
Paweł Gronowski 9f07d9222f Merge pull request #53793 from Jeston10/50159-migrate-inspect-api-tests
integration/container: migrate inspect API tests from integration-cli
2026-10-28 15:16:21 +01:00
Paweł Gronowski 8d3169d09c Merge pull request #54012 from corhere/firewalld-restore-on-stop
libnetwork: handle firewalld stopping or starting late
2026-10-28 15:07:37 +01:00
Paweł Gronowski 1b1e60de6a overlay2: Allow rootless mode with SELinux enabled
Rootless dockerd refused to use overlay2 whenever SELinux was enabled
on the host, forcing users onto fuse-overlayfs:

```
overlay is not supported for Rootless with SELinux
```

The check was added for Fedora 34, where rootless overlayfs on kernel
5.11 hit SELinux denials.
That no longer happens on current hosts such as Fedora 41.
The containerd overlayfs snapshotter never had an equivalent check and
already runs natively in rootless mode with SELinux enforcing.

Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
2026-10-28 13:03:45 +01:00
Paweł Gronowski a7580523ff Merge pull request #54044 from vvoland/update-xnet
vendor: golang.org/x/net v0.62.0
2026-10-28 12:57:09 +01:00
Paweł Gronowski c3f52c3731 Merge pull request #54033 from vvoland/ext-namegen-move
daemon: Move name-generator provider resolution out of extpoints
2026-10-28 12:46:02 +01:00
Paweł Gronowski 3df9609af2 gha/labeler: Include hidden paths in all label matches
Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
2026-10-28 12:29:47 +01:00
Paweł Gronowski 803a2ae823 gha/labeler: Don't re-add labels removed by a maintainer
The labeler runs again on every push, so a label a maintainer removed
as inaccurate came back with the next commit.

Skip labels the PR already has, and labels with an unlabeled event in
the PR's history.
The workflow never removes labels itself, so any such event comes from
a deliberate removal.

Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
2026-10-28 12:29:47 +01:00
Paweł Gronowski 4316355069 gha/labeler: Replace actions/labeler with a github-script
The actions/labeler config had grown hard to keep right.

Apply the labels from a short github-script that matches the changed
paths against globs instead.

Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
2026-10-28 12:29:46 +01:00
Sebastiaan van Stijn 5ed8b59a47 Merge pull request #54045 from akasakariko/fix/test-dns-options-isolation
libnetwork: isolate TestDNSOptions from host DNS options
2026-10-28 11:38:21 +01:00
Sebastiaan van Stijn 396be3f892 Merge pull request #54042 from vvoland/labeler
gha/labeler: Fix spurious labels
2026-10-28 08:45:16 +01:00
Akihiro Suda fca4feda32 Merge pull request #54035 from vvoland/fix-grpc
vendor: google.golang.org/grpc v1.85.0
2026-10-28 07:54:21 +09:00
Paweł Gronowski 3d910a390e daemon: Add a monolith extension for daemon behavior
Add org.mobyproject.daemon.monolith.v0 to expose daemon capabilities
as extension points.
It is a temporary bridge until the daemon is split into independent
extensions.

Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
2026-10-27 21:59:47 +01:00
Paweł Gronowski bcdbbe9369 daemon: Add State.StatusChanges to follow container status changes
State.Wait only reports exits and removal, so callers could not follow
a container through its status changes.

StatusChanges yields the current state and then every status change in
order, until the container is removed.
A consumer that falls too far behind gets an error instead of missing
changes.

Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
2026-10-27 21:59:44 +01:00
Paweł Gronowski e24b50b30f daemon: Set the paused and dead flags through State methods
Add SetPaused and SetDead so that every status change goes through a
State setter, like SetRunning and SetStopped already do.

Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
2026-10-27 21:59:41 +01:00
Jeston SinghandPaweł Gronowski 420c2de5cf integration/container: Consolidate legacy inspect API tests
Move the raw inspect response checks from integration-cli into
TestContainerInspectWithRaw.
Share one created container and API 1.24 response to verify legacy
top-level fields, the string Path, and VolumeDriver placement in
HostConfig rather than Config.

Drop the redundant bridge endpoint check because existing network
integration tests already validate and use the inspected address.

Signed-off-by: Jeston Singh <sjestonsingh@gmail.com>
Co-authored-by: Paweł Gronowski <pawel.gronowski@docker.com>
Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
2026-10-27 21:37:04 +01:00
Paweł Gronowski 58131010ed vendor: golang.org/x/net v0.62.0
full diff: https://github.com/golang/net/compare/v0.61.0...v0.62.0

This release addresss the following security issues:

- html: avoid quadratic complexity when coalescing text nodes

    When coalescing adjacent text nodes in addText and fosterParent,
    appending to an existing TextNode's Data via string concatenation
    (n.Data += text) reallocated and copied the accumulated string on every
    token. Inputs containing many short text runs separated by ignored end
    tags (such as "a") caused O(n^2) allocations and byte copies.

    Accumulate coalesced text in per-node byte slices during parsing and
    materialize Data strings once at the end of parse.

    Thanks to Markus Magnuson for reporting this issue.

    This is CVE-2026-78661 and Go issue https://go.dev/issue/82224.

- html: check all ancestor namespace transitions when rendering raw text

    In childTextNodesAreLiteral, walking up the tree previously stopped at
    the nearest foreign ancestor once an HTML integration point was found.
    However, that integration point may itself be a descendant of an element
    that was foster-parented into a foreign namespace (such as or
    fostered under ), causing a parser to resolve the
    subtree in a different foreign namespace upon re-parsing the rendered
    output.

    Continue walking the full ancestor chain and verify that every
    transition from a non-empty namespace occurs at an HTML integration
    point before emitting literal text.

    Thanks to Ali Sherif (https://www.linkedin.com/in/ali-sherif-13812b276) for reporting this issue.

    This is CVE-2026-97045 and Go issue https://go.dev/issue/82622.

Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
2026-10-27 21:32:26 +01:00
Paweł Gronowski 9d3170875d Merge pull request #53749 from thaJeztah/bump_msgp
vendor: github.com/tinylib/msgp v1.4.0
2026-10-27 21:17:46 +01:00
Paweł Gronowski 5ae0e11665 Merge pull request #53796 from thaJeztah/annotation_consts
use OCI and containerd consts for annotations
2026-10-27 21:16:53 +01:00
Paweł Gronowski fae7dd19ad Merge pull request #53849 from corhere/ocihook
Move the setkey hook listener from libnetwork to the daemon
2026-10-27 21:15:43 +01:00
Paweł Gronowski e195dbd621 gha/labeler: Keep area labels when a PR also changes vendor/
Several labels paired their globs with an all-globs-to-all-files
'!vendor/**' check, which requires that no changed file be under
vendor/.
A PR that changed AppArmor code and also bumped a dependency therefore
lost the area/security label.

Pair each repository-wide glob with '!vendor/**' in an
all-globs-to-any-file rule instead, so the label applies when some
non-vendor file matches.
Globs rooted outside vendor/ no longer need the exclusion.

Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
2026-10-27 19:48:05 +01:00
Paweł Gronowski 7716be0279 gha/labeler: Only add area/docs when just docs change
The '**/*.md' glob matched any Markdown file, so code changes that
also touched a README, api/docs/CHANGELOG.md, or files under .github/
got the area/docs label.

Require every changed file to match one of the docs globs instead.

Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
2026-10-27 19:47:18 +01:00
Paweł Gronowski cd70c006fc gha/labeler: Stop labeling unrelated files as area/logging
The '**/*log*' glob matched any file with "log" in its name, such as
api/docs/CHANGELOG.md and client/login.go, so every API change got the
area/logging label.

Match '**/*_logs*' instead, which still covers the container, service,
and task logs files in the client.

Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
2026-10-27 19:47:13 +01:00
Paweł Gronowski 10539e56d8 gha/labeler: Add area/testing when ONLY test files change
The area/testing label was added whenever any changed file was under a
test directory, so PRs that also touched daemon code got labeled.

Use any-glob-to-all-files so the label is only applied when every
changed file matches one of the test globs.
The vendor exclusion is dropped since no test glob matches vendor/.

Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
2026-10-27 19:45:01 +01:00
akasakariko 569bb86064 libnetwork: isolate TestDNSOptions from host DNS options
Provide a temporary origin resolv.conf for both sandboxes so host options such as edns0 and trust-ad cannot affect the DNS option assertions

Signed-off-by: akasakariko <148060537+akasakariko@users.noreply.github.com>
2026-10-27 22:47:26 +09:00
Paweł Gronowski 204ac6dcae vendor: google.golang.org/grpc v1.85.0
full diff: https://github.com/grpc/grpc-go/compare/v1.84.0...v1.85.0

Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
2026-10-27 14:04:33 +01:00
Sebastiaan van Stijn 9cad7b0b9f Merge pull request #54027 from renovate-bot/renovate/github.com-containerd-nri-0.x
fix(deps): update module github.com/containerd/nri to v0.12.5
2026-10-27 09:24:29 +01:00
Paweł Gronowski 88c9d21f4a daemon: Move name-generator provider resolution out of extpoints
The extpoints packages define the extension contract.
Provider selection, timeouts, name validation, and the built-in
fallback are daemon policy, and the daemon is the only caller.

The fallback helper is can be moved to github.com/moby/extensions once
another point needs it.

Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
2026-10-26 21:35:07 +01:00
Paweł Gronowski 4237bc6cb7 Merge pull request #54011 from akasakariko/fix/53466-batch-port-firewall
bridge: batch firewall updates for published ports
2026-10-26 21:06:55 +01:00
Mend Renovate 929f3c2edc fix(deps): update module github.com/containerd/nri to v0.12.5
Signed-off-by: Mend Renovate <bot@renovateapp.com>
2026-10-26 19:16:39 +00:00
Paweł Gronowski f2476e4f9a Merge pull request #54031 from robmry/nftables-hairpin-masq-dup
nftabler: allow duplicate hairpin masquerade rules
2026-10-26 20:07:26 +01:00
Sebastiaan van Stijn 2e3b66410d Merge pull request #54029 from vvoland/label-ai
gha/labeler: Label AI-assisted pull requests
2026-10-26 19:47:52 +01:00
akasakariko e83b503590 bridge: batch firewall updates for published ports
Allocate all requested port bindings before applying their firewall rules, so nftables rewrites each affected chain once per address family rather than once per port group

Keep grouped port allocation, start proxies after the firewall update, and roll back resources and installed rules if either stage fails

Extend the port-mapping tests to check a single firewall update and verify cleanup and rebinding after setup failures

Signed-off-by: akasakariko <148060537+akasakariko@users.noreply.github.com>
2026-10-27 00:28:11 +09:00
Rob Murray 60109b06fb nftabler: allow duplicate hairpin masquerade rules
With the userland proxy disabled, the per-port "MASQ TO OWN PORT" rule
is keyed on the container's address and port, not the host port. So,
when more than one host port is mapped to the same container port, the
same rule is generated for each binding.

Commit 785ae9a0f9 dropped the code that ignored "rule exists" and "rule
does not exist" errors for this rule, without setting IgnoreExist. So,
mapping a second host port to the same container port failed with
"rule exists".

Set IgnoreExist on the rule, as for the per-port forwarding rule.

Signed-off-by: Rob Murray <rob.murray@docker.com>
2026-10-26 16:13:15 +01:00
Paweł Gronowski f896c542e9 gha/labeler: Label AI-assisted pull requests
Add `meta/ai-assisted` label when the description has a line starting
with "Created with:" (matching the CONTRIBUTING.md guidelines).

Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
2026-10-26 14:51:09 +01:00
Paweł Gronowski 12fdfe2cfc Merge pull request #54028 from renovate-bot/renovate/cloud.google.com-go-logging-1.x
fix(deps): update module cloud.google.com/go/logging to v1.21.0
2026-10-26 14:12:53 +01:00
Sebastiaan van Stijn a2356c9a79 Merge pull request #54025 from renovate-bot/renovate/github.com-moby-policy-helpers-digest
fix(deps): update github.com/moby/policy-helpers digest to 485a1be
2026-10-26 12:42:53 +01:00
Sebastiaan van Stijn 2a9b7e0b2b Merge pull request #54022 from renovate-bot/renovate/github.com-aws-smithy-go-1.x
fix(deps): update module github.com/aws/smithy-go to v1.28.6
2026-10-26 12:42:33 +01:00