Skip to content

Conversation

@thaJeztah
Copy link
Member

@thaJeztah thaJeztah commented Aug 27, 2025

depends on / stacked on:

relates to:

api/docs: fix events example response

Don't include the deprecated id, status, and from fields
in the response; they're no longer part of the API since v1.22
(moby@72f188).

daemon/events: remove tests for deprecated API fields

These fields were deprecated in moby@72f188 (docker v1.10, API v1.22),
and we shouldn't test for them.

daemon/events: don't include deprecated status, id, and from fields

These fields were deprecated in moby@72f188 (docker v1.10, API v1.22),
but the daemon still included them in the response.

api/types/events: Message: remove deprecated Status, ID, and From fields

These fields were deprecated in moby@72f188 (docker v1.10, API v1.22),
with the deprecation message updated to be in the correct format in
moby@247f47 (docker v23.0).

- Human readable description for the release notes

`GET /events` no longer includes the deprecated `status`, `id`, and `from` fields. These fields were removed in API v1.22, but still included in the response. These fields are now omitted when using API v1.52 or later.

- A picture of a cute animal (not mandatory but encouraged)

@thaJeztah
Copy link
Member Author

thaJeztah commented Sep 10, 2025

Failure looks related, but we need to check if it's either the test not matching correctly, or if (e.g.) the docker 18.06 CLI was using the deprecated fields;

=== Failed
=== FAIL: amd64.integration-cli TestDockerCLIStatsSuite/TestStatsAllNewContainersAdded (30.48s)
    docker_cli_stats_test.go:172: failed to observe new container created added to stats
    --- FAIL: TestDockerCLIStatsSuite/TestStatsAllNewContainersAdded (30.48s)

The test verifies that the CLI acts on "new container created" events, and subsequently to add the new container to the list of containers for which it's collecting stats;

func (s *DockerCLIStatsSuite) TestStatsAllNewContainersAdded(c *testing.T) {
// Windows does not support stats
testRequires(c, DaemonIsLinux)
id := make(chan string)
addedChan := make(chan struct{})
runSleepingContainer(c, "-d")
statsCmd := exec.Command(dockerBinary, "stats")
stdout, err := statsCmd.StdoutPipe()
assert.NilError(c, err)
assert.NilError(c, statsCmd.Start())
go statsCmd.Wait()
defer statsCmd.Process.Kill()
go func() {
containerID := <-id
matchID := regexp.MustCompile(containerID)
scanner := bufio.NewScanner(stdout)
for scanner.Scan() {
switch {
case matchID.MatchString(scanner.Text()):
close(addedChan)
return
}
}
}()
out := runSleepingContainer(c, "-d")
cli.WaitRun(c, out)
id <- strings.TrimSpace(out)[:12]
select {
case <-time.After(30 * time.Second):
c.Fatal("failed to observe new container created added to stats")
case <-addedChan:
// ignore, done
}
}

@thaJeztah
Copy link
Member Author

Interesting, so for some reason, with this PR, the stats command exits (status 2) the moment this second container is started; as a result the scanner above never even runs.

out := runSleepingContainer(c, "-d")
cli.WaitRun(c, out)
id <- strings.TrimSpace(out)[:12]

The same does not happen if I start the containers before the stats command is started. I wondered if the stats command would exit if it found "no containers" during refresh, so I added some more containers before starting the stats command, but that's not it.

When running the test manually (i.e. start a container, run stats, then run a second container), things look to function normally.

@thaJeztah
Copy link
Member Author

thaJeztah commented Sep 10, 2025

Ah! Bug in the CLI; it's panicking; this is on docker 28.3.3 (not the old CLI)

started container 1: 76acafcab7d8d8f9121f9e5c868c1e08794e991933c9b864b3e14fbc05b496b2
container 1 is running: 76acafcab7d8d8f9121f9e5c868c1e08794e991933c9b864b3e14fbc05b496b2 -> 76acafcab7d8
time="2025-09-10T15:59:44Z" level=debug msg="collecting stats for 76acafcab7d8"
time="2025-09-10T15:59:44Z" level=debug msg="event handler: received event: {   container create {dace920720cc5ae5bdc08b4d37ac0b9df3b7a69104a91d32f9caa0fe7293e6d0 map[image:busybox name:quizzical_carver]} local 1757519984 1757519984740298338}"
time="2025-09-10T15:59:44Z" level=debug msg="event handler: received event: {   container start {dace920720cc5ae5bdc08b4d37ac0b9df3b7a69104a91d32f9caa0fe7293e6d0 map[image:busybox name:quizzical_carver]} local 1757519984 1757519984797396964}"
created container 2: dace920720cc5ae5bdc08b4d37ac0b9df3b7a69104a91d32f9caa0fe7293e6d0
panic: runtime error: slice bounds out of range
goroutine 50 [running]:
github.com/docker/cli/cli/command/container.runStats.func4(0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4420316c60, 0x9, 0x4420316c69, 0x5, ...)
	/go/src/github.com/docker/cli/cli/command/container/stats.go:137 +0x15c
created by github.com/docker/cli/cli/command.(*eventHandler).Watch
	/go/src/github.com/docker/cli/cli/command/events_utils.go:45 +0x150
goroutine 1 [chan receive]:
github.com/docker/cli/cli/command/container.runStats(0x137bc00, 0x4420580e70, 0x44201beae0, 0x0, 0x0)
	/go/src/github.com/docker/cli/cli/command/container/stats.go:211 +0x7a0
github.com/docker/cli/cli/command/container.NewStatsCommand.func1(0x44201fdb80, 0x1d3ad80, 0x0, 0x0, 0x0, 0x0)
	/go/src/github.com/docker/cli/cli/command/container/stats.go:39 +0x5c
github.com/docker/cli/vendor/github.com/spf13/cobra.(*Command).execute(0x44201fdb80, 0x44200380a0, 0x0, 0x0, 0x44201fdb80, 0x44200380a0)
	/go/src/github.com/docker/cli/vendor/github.com/spf13/cobra/command.go:762 +0x314
github.com/docker/cli/vendor/github.com/spf13/cobra.(*Command).ExecuteC(0x442016e500, 0xf16800, 0x4420635740, 0xf16800)
	/go/src/github.com/docker/cli/vendor/github.com/spf13/cobra/command.go:852 +0x208
github.com/docker/cli/vendor/github.com/spf13/cobra.(*Command).Execute(0x442016e500, 0x442016e500, 0x1340f80)
	/go/src/github.com/docker/cli/vendor/github.com/spf13/cobra/command.go:800 +0x20
main.main()
	/go/src/github.com/docker/cli/cmd/docker/docker.go:174 +0xb4

Full output below

Details
started container 1: 76acafcab7d8d8f9121f9e5c868c1e08794e991933c9b864b3e14fbc05b496b2
container 1 is running: 76acafcab7d8d8f9121f9e5c868c1e08794e991933c9b864b3e14fbc05b496b2 -> 76acafcab7d8
time="2025-09-10T15:59:44Z" level=debug msg="collecting stats for 76acafcab7d8"
time="2025-09-10T15:59:44Z" level=debug msg="event handler: received event: {   container create {dace920720cc5ae5bdc08b4d37ac0b9df3b7a69104a91d32f9caa0fe7293e6d0 map[image:busybox name:quizzical_carver]} local 1757519984 1757519984740298338}"
time="2025-09-10T15:59:44Z" level=debug msg="event handler: received event: {   container start {dace920720cc5ae5bdc08b4d37ac0b9df3b7a69104a91d32f9caa0fe7293e6d0 map[image:busybox name:quizzical_carver]} local 1757519984 1757519984797396964}"
created container 2: dace920720cc5ae5bdc08b4d37ac0b9df3b7a69104a91d32f9caa0fe7293e6d0
panic: runtime error: slice bounds out of range
goroutine 50 [running]:
github.com/docker/cli/cli/command/container.runStats.func4(0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4420316c60, 0x9, 0x4420316c69, 0x5, ...)
	/go/src/github.com/docker/cli/cli/command/container/stats.go:137 +0x15c
created by github.com/docker/cli/cli/command.(*eventHandler).Watch
	/go/src/github.com/docker/cli/cli/command/events_utils.go:45 +0x150
goroutine 1 [chan receive]:
github.com/docker/cli/cli/command/container.runStats(0x137bc00, 0x4420580e70, 0x44201beae0, 0x0, 0x0)
	/go/src/github.com/docker/cli/cli/command/container/stats.go:211 +0x7a0
github.com/docker/cli/cli/command/container.NewStatsCommand.func1(0x44201fdb80, 0x1d3ad80, 0x0, 0x0, 0x0, 0x0)
	/go/src/github.com/docker/cli/cli/command/container/stats.go:39 +0x5c
github.com/docker/cli/vendor/github.com/spf13/cobra.(*Command).execute(0x44201fdb80, 0x44200380a0, 0x0, 0x0, 0x44201fdb80, 0x44200380a0)
	/go/src/github.com/docker/cli/vendor/github.com/spf13/cobra/command.go:762 +0x314
github.com/docker/cli/vendor/github.com/spf13/cobra.(*Command).ExecuteC(0x442016e500, 0xf16800, 0x4420635740, 0xf16800)
	/go/src/github.com/docker/cli/vendor/github.com/spf13/cobra/command.go:852 +0x208
github.com/docker/cli/vendor/github.com/spf13/cobra.(*Command).Execute(0x442016e500, 0x442016e500, 0x1340f80)
	/go/src/github.com/docker/cli/vendor/github.com/spf13/cobra/command.go:800 +0x20
main.main()
	/go/src/github.com/docker/cli/cmd/docker/docker.go:174 +0xb4
goroutine 5 [syscall]:
os/signal.signal_recv(0x0)
	/usr/local/go/src/runtime/sigqueue.go:139 +0xc8
os/signal.loop()
	/usr/local/go/src/os/signal/signal_unix.go:22 +0x18
created by os/signal.init.0
	/usr/local/go/src/os/signal/signal_unix.go:28 +0x30
goroutine 35 [chan receive]:
github.com/docker/cli/vendor/github.com/golang/glog.(*loggingT).flushDaemon(0x1d1c5c0)
	/go/src/github.com/docker/cli/vendor/github.com/golang/glog/glog.go:879 +0x68
created by github.com/docker/cli/vendor/github.com/golang/glog.init.0
	/go/src/github.com/docker/cli/vendor/github.com/golang/glog/glog.go:410 +0x1f8
goroutine 14 [chan receive]:
github.com/docker/cli/cli/command.(*eventHandler).Watch(0x442055b7f0, 0x44203b4d80)
	/go/src/github.com/docker/cli/cli/command/events_utils.go:37 +0x3c
created by github.com/docker/cli/cli/command/container.runStats
	/go/src/github.com/docker/cli/cli/command/container/stats.go:151 +0xc84
goroutine 12 [select]:
net/http.(*persistConn).readLoop(0x4420531200)
	/usr/local/go/src/net/http/transport.go:1717 +0x550
created by net/http.(*Transport).dialConn
	/usr/local/go/src/net/http/transport.go:1237 +0x7d0
goroutine 13 [select]:
net/http.(*persistConn).writeLoop(0x4420531200)
	/usr/local/go/src/net/http/transport.go:1822 +0xd4
created by net/http.(*Transport).dialConn
	/usr/local/go/src/net/http/transport.go:1238 +0x7f0
goroutine 15 [select]:
github.com/docker/cli/cli/command/container.runStats.func1(0x44203b4d20, 0x44203b4d80)
	/go/src/github.com/docker/cli/cli/command/container/stats.go:76 +0x21c
created by github.com/docker/cli/cli/command/container.runStats
	/go/src/github.com/docker/cli/cli/command/container/stats.go:152 +0xca8
goroutine 16 [IO wait]:
internal/poll.runtime_pollWait(0xffffaa476f00, 0x72, 0x4420256000)
	/usr/local/go/src/runtime/netpoll.go:173 +0x3c
internal/poll.(*pollDesc).wait(0x4420084518, 0x72, 0xffffffffffffff00, 0x13431e0, 0x1c80590)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:85 +0xa0
internal/poll.(*pollDesc).waitRead(0x4420084518, 0x4420256000, 0x1000, 0x1000)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:90 +0x30
internal/poll.(*FD).Read(0x4420084500, 0x4420256000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/fd_unix.go:157 +0x138
net.(*netFD).Read(0x4420084500, 0x4420256000, 0x1000, 0x1000, 0xeab7eeec52c1d01, 0x44202f800e, 0x2)
	/usr/local/go/src/net/fd_unix.go:202 +0x3c
net.(*conn).Read(0x442057c668, 0x4420256000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
	/usr/local/go/src/net/net.go:176 +0x50
net/http.(*persistConn).Read(0x4420531200, 0x4420256000, 0x1000, 0x1000, 0x4420294208, 0xf15f80, 0x442055c3e0)
	/usr/local/go/src/net/http/transport.go:1453 +0xe8
bufio.(*Reader).fill(0x4420370ea0)
	/usr/local/go/src/bufio/bufio.go:100 +0x104
bufio.(*Reader).ReadSlice(0x4420370ea0, 0x10a, 0x112ac80, 0x442055c3e0, 0x186, 0x0, 0x0)
	/usr/local/go/src/bufio/bufio.go:341 +0x20
net/http/internal.readChunkLine(0x4420370ea0, 0x186, 0x133e640, 0x244098, 0x3, 0x2)
	/usr/local/go/src/net/http/internal/chunked.go:122 +0x28
net/http/internal.(*chunkedReader).beginChunk(0x4420474030)
	/usr/local/go/src/net/http/internal/chunked.go:48 +0x24
net/http/internal.(*chunkedReader).Read(0x4420474030, 0x44204e8001, 0x5ff, 0x5ff, 0x3, 0x2878a8, 0x8)
	/usr/local/go/src/net/http/internal/chunked.go:93 +0xec
net/http.(*body).readLocked(0x4420640040, 0x44204e8001, 0x5ff, 0x5ff, 0x0, 0x291c70, 0x2)
	/usr/local/go/src/net/http/transfer.go:778 +0x4c
net/http.(*body).Read(0x4420640040, 0x44204e8001, 0x5ff, 0x5ff, 0x0, 0x0, 0x0)
	/usr/local/go/src/net/http/transfer.go:770 +0xc0
net/http.(*bodyEOFSignal).Read(0x4420640080, 0x44204e8001, 0x5ff, 0x5ff, 0x0, 0x0, 0x0)
	/usr/local/go/src/net/http/transport.go:2187 +0xa8
encoding/json.(*Decoder).refill(0x44202941e0, 0x112ac0a, 0x9)
	/usr/local/go/src/encoding/json/stream.go:159 +0xf0
encoding/json.(*Decoder).readValue(0x44202941e0, 0x0, 0x0, 0x2)
	/usr/local/go/src/encoding/json/stream.go:134 +0x1e8
encoding/json.(*Decoder).Decode(0x44202941e0, 0xeadca0, 0x4420392ea0, 0x0, 0x0)
	/usr/local/go/src/encoding/json/stream.go:63 +0x50
github.com/docker/cli/vendor/github.com/docker/docker/client.(*Client).Events.func1(0x44203710e0, 0x4420178980, 0x0, 0x0, 0x0, 0x0, 0x44201a74d0, 0x44203b4e40, 0x1363ca0, 0x4420040108, ...)
	/go/src/github.com/docker/cli/vendor/github.com/docker/docker/client/events.go:53 +0x1e0
created by github.com/docker/cli/vendor/github.com/docker/docker/client.(*Client).Events
	/go/src/github.com/docker/cli/vendor/github.com/docker/docker/client/events.go:25 +0xbc
goroutine 27 [IO wait]:
internal/poll.runtime_pollWait(0xffffaa476e30, 0x72, 0x44204da000)
	/usr/local/go/src/runtime/netpoll.go:173 +0x3c
internal/poll.(*pollDesc).wait(0x4420028a98, 0x72, 0xffffffffffffff00, 0x13431e0, 0x1c80590)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:85 +0xa0
internal/poll.(*pollDesc).waitRead(0x4420028a98, 0x44204da000, 0x1000, 0x1000)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:90 +0x30
internal/poll.(*FD).Read(0x4420028a80, 0x44204da000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/fd_unix.go:157 +0x138
net.(*netFD).Read(0x4420028a80, 0x44204da000, 0x1000, 0x1000, 0x44201d65db, 0x442044b1cc, 0x1)
	/usr/local/go/src/net/fd_unix.go:202 +0x3c
net.(*conn).Read(0x442037c048, 0x44204da000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
	/usr/local/go/src/net/net.go:176 +0x50
net/http.(*persistConn).Read(0x44203866c0, 0x44204da000, 0x1000, 0x1000, 0x44202943e8, 0xf92880, 0x44204e3438)
	/usr/local/go/src/net/http/transport.go:1453 +0xe8
bufio.(*Reader).fill(0x44205a01e0)
	/usr/local/go/src/bufio/bufio.go:100 +0x104
bufio.(*Reader).ReadSlice(0x44205a01e0, 0x10a, 0x108a780, 0x44204e3438, 0x195, 0x0, 0x0)
	/usr/local/go/src/bufio/bufio.go:341 +0x20
net/http/internal.readChunkLine(0x44205a01e0, 0x195, 0x133e640, 0x244098, 0x3, 0x2)
	/usr/local/go/src/net/http/internal/chunked.go:122 +0x28
net/http/internal.(*chunkedReader).beginChunk(0x44204742d0)
	/usr/local/go/src/net/http/internal/chunked.go:48 +0x24
net/http/internal.(*chunkedReader).Read(0x44204742d0, 0x44201d6001, 0xdff, 0xdff, 0x1259a28, 0x2878a8, 0x8)
	/usr/local/go/src/net/http/internal/chunked.go:93 +0xec
net/http.(*body).readLocked(0x4420640280, 0x44201d6001, 0xdff, 0xdff, 0xf92880, 0x291c70, 0x44204f2408)
	/usr/local/go/src/net/http/transfer.go:778 +0x4c
net/http.(*body).Read(0x4420640280, 0x44201d6001, 0xdff, 0xdff, 0x0, 0x0, 0x0)
	/usr/local/go/src/net/http/transfer.go:770 +0xc0
net/http.(*bodyEOFSignal).Read(0x44206402c0, 0x44201d6001, 0xdff, 0xdff, 0x0, 0x0, 0x0)
	/usr/local/go/src/net/http/transport.go:2187 +0xa8
encoding/json.(*Decoder).refill(0x44202943c0, 0xead60a, 0x9)
	/usr/local/go/src/encoding/json/stream.go:159 +0xf0
encoding/json.(*Decoder).readValue(0x44202943c0, 0x0, 0x0, 0x5c2a0)
	/usr/local/go/src/encoding/json/stream.go:134 +0x1e8
encoding/json.(*Decoder).Decode(0x44202943c0, 0xe91120, 0x442057c758, 0x442035d750, 0xc)
	/usr/local/go/src/encoding/json/stream.go:63 +0x50
github.com/docker/cli/cli/command/container.collect.func2(0x442037c058, 0x1349fa0, 0x44206402c0, 0x442020870c, 0x5, 0x44203713e0, 0x442035ce38, 0x442035cea0, 0x44202ed400, 0x1)
	/go/src/github.com/docker/cli/cli/command/container/stats_helpers.go:90 +0x54
created by github.com/docker/cli/cli/command/container.collect
	/go/src/github.com/docker/cli/cli/command/container/stats_helpers.go:80 +0x280
goroutine 25 [select]:
net/http.(*persistConn).readLoop(0x44203866c0)
	/usr/local/go/src/net/http/transport.go:1717 +0x550
created by net/http.(*Transport).dialConn
	/usr/local/go/src/net/http/transport.go:1237 +0x7d0
goroutine 26 [select]:
net/http.(*persistConn).writeLoop(0x44203866c0)
	/usr/local/go/src/net/http/transport.go:1822 +0xd4
created by net/http.(*Transport).dialConn
	/usr/local/go/src/net/http/transport.go:1238 +0x7f0
goroutine 49 [select]:
github.com/docker/cli/cli/command/container.collect(0x1363ca0, 0x4420040108, 0x44202ed400, 0x1390180, 0x4420178980, 0x1, 0x4420629df0)
	/go/src/github.com/docker/cli/cli/command/container/stats_helpers.go:138 +0x308
created by github.com/docker/cli/cli/command/container.runStats.func2
	/go/src/github.com/docker/cli/cli/command/container/stats.go:114 +0x1f4
stats wait completed: exit status 2
container 2 is running: dace920720cc5ae5bdc08b4d37ac0b9df3b7a69104a91d32f9caa0fe7293e6d0 -> dace920720cc
regex: dace920720cc

@thaJeztah
Copy link
Member Author

🙈 I just realised that the stack-dump was from the 18.06 binary, not the 28.3.2 one, so yes, it's a bug in the CLI, because the stats code doesn't check for the field to be non-empty (or expected length) before truncating; on the 28.3.2 binary, the test passes, because that uses the new fields, but the actual cause of the panic could happen on both if the field is empty or shorter than 12 chars;

https://github.com/docker/cli/blob/v18.06.0-ce/cli/command/container/stats.go#L137

s := formatter.NewContainerStats(e.ID[:12])

https://github.com/docker/cli/blob/v18.06.0-ce/cli/command/container/stats.go#L137

s := NewStats(e.Actor.ID[:12])

It looks like the CLI switched away from depending on the deprecated fields in docker/cli@46d0ba2

Which was part of CLI v25.0.0-beta.1 (which uses API 1.44

So at least any version of the CLI older than v25.0.0, and versions of docker compose before docker/compose@7781b7c (v2.24.0) would break if we drop the fields for API < v1.44.

Looks like we need to backfill those fields, but we can remove the fields, and do so when producing the response.

@thaJeztah thaJeztah added this to the 29.0.0 milestone Sep 10, 2025
thaJeztah added a commit to thaJeztah/docker that referenced this pull request Sep 10, 2025
Don't include the deprecated `status`, `id`, and `from` fields in event
responses.

These fields were deprecated in [moby@72f188] (docker v1.10, API v1.22),
but the daemon still included them in the response.

Unfortunately, the Docker CLI (and compose indirectly), continued using
these fields up until v25.0.0, and panic if the fields are omitted, or
left empty (due to a bug), see: moby#50832 (comment)
so we need to continue producing these fields on API < v1.52.

[moby@72f188]: moby@72f1881

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
@thaJeztah thaJeztah force-pushed the events_remove_deprecated branch from 0139797 to abdcc07 Compare September 10, 2025 23:25
@thaJeztah
Copy link
Member Author

I THINK I've seen this one fail a few times; could be flaky, although it failed in 2 separate checks in this PR, so need to check if it could be legit (or require some test to be adjusted);

=== Failed
=== FAIL: daemon/logger/fluentd TestReadWriteTimeoutsAreEffective (10.00s)
    fluentd_test.go:315: Test timed out, which is unexpected
--- PASS: TestReadWriteTimeoutsAreEffective/write_timeout (0.00s)
--- PASS: TestReadWriteTimeoutsAreEffective/read_timeout (10.00s)

These fields were deprecated in [moby@72f188] (docker v1.10, API v1.22),
and we shouldn't test for them.

[moby@72f188]: moby@72f1881

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Don't include the deprecated `status`, `id`, and `from` fields in event
responses.

These fields were deprecated in [moby@72f188] (docker v1.10, API v1.22),
but the daemon still included them in the response.

Unfortunately, the Docker CLI (and compose indirectly), continued using
these fields up until v25.0.0, and panic if the fields are omitted, or
left empty (due to a bug), see: moby#50832 (comment)
so we need to continue producing these fields on API < v1.52.

[moby@72f188]: moby@72f1881

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
These fields were deprecated in [moby@72f188] (docker v1.10, API v1.22),
with the deprecation message updated to be in the correct format in
[moby@247f47] (docker v23.0).

[moby@72f188]: moby@72f1881
[moby@247f47]: moby@247f479

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
@thaJeztah
Copy link
Member Author

@thompson-shaun thompson-shaun requested review from dmcgowan and vvoland and removed request for vvoland September 11, 2025 13:30
@thaJeztah thaJeztah merged commit 1c006f2 into moby:master Sep 11, 2025
214 of 215 checks passed
@thaJeztah thaJeztah deleted the events_remove_deprecated branch September 11, 2025 19:23
@thompson-shaun thompson-shaun moved this from New to Complete in 🔦 Maintainer spotlight Sep 18, 2025
agners added a commit to home-assistant/supervisor that referenced this pull request Nov 12, 2025
The "id" field in Docker events is deprecated since a while and got
removed with moby/moby#50832. Use the "actor.id"
field instead to avoid issues with newer Docker versions. This field
got added with Docker 1.10.0, so much older version then we actually
support.
struanb added a commit to newsnowlabs/docker-ingress-routing-daemon that referenced this pull request Nov 14, 2025
GET /events no longer includes the deprecated status, id, and from fields. These fields were removed in API v1.22, but still included in the response. These fields are now omitted when using API v1.52 or later. See moby/moby#50832
struanb added a commit to newsnowlabs/docker-ingress-routing-daemon that referenced this pull request Nov 15, 2025
GET /events no longer includes the deprecated status, id, and from fields. These fields were removed in API v1.22, but still included in the response. These fields are now omitted when using API v1.52 or later. See moby/moby#50832
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

2 participants