Skip to content

[BUG] concurrent map writes when running multiple containers #12780

@tony2001

Description

@tony2001

Description

I'm running a rather complicated docker compose file featuring 17 images on Ubuntu 24.04.2 LTS using the latest Docker Compose version and it crashes with concurrent map writes:

$ docker compose  -f ./docker-compose.yml 

[+] Running 0/17
 ⠦ kafka-ui Pulling                                                                0.7s 
 ⠦ backend Pulling                                                                 0.7s 
 ⠦ kafka-init Pulling                                                              0.7s 
 ⠦ keychain Pulling                                                                0.7s 
 ⠦ temporal-ui Pulling                                                             0.7s 
 ⠦ temporal Pulling                                                                0.7s 
 ⠦ temporal-admin-tools Pulling                                                    0.7s 
 ⠦ postgres-gatedb-init Pulling                                                    0.7s 
 ⠦ frontend Pulling                                                                0.7s 
 ⠦ kafka Pulling                                                                   0.7s 
 ⠦ vault Pulling                                                                   0.7s 
 ⠦ postgres Pulling                                                                0.7s 
 ⠦ keycloak Pulling                                                                0.7s 
 ⠦ jaeger Pulling                                                                  0.7s 
 ⠦ redis Pulling                                                                   0.7s 
 ⠦ aml-vault Pulling                                                               0.7s 
 ⠦ aml-vault-init Pulling                                                          0.7s 
fatal error: concurrent map writes
fatal error: concurrent map writes

Full backtrace:

goroutine 152 [running]:
github.com/docker/compose/v2/pkg/compose.(*composeService).pullRequiredImages.func1.1()
        github.com/docker/compose/v2/pkg/compose/pull.go:328 +0x236
golang.org/x/sync/errgroup.(*Group).Go.func1()
        golang.org/x/sync@v0.13.0/errgroup/errgroup.go:79 +0x50
created by golang.org/x/sync/errgroup.(*Group).Go in goroutine 90
        golang.org/x/sync@v0.13.0/errgroup/errgroup.go:76 +0x96

goroutine 1 [semacquire]:
sync.runtime_Semacquire(0xc0009b71e8?)
        runtime/sema.go:71 +0x25
sync.(*WaitGroup).Wait(0x25d4c40?)
        sync/waitgroup.go:118 +0x48
golang.org/x/sync/errgroup.(*Group).Wait(0xc000710d00)
        golang.org/x/sync@v0.13.0/errgroup/errgroup.go:56 +0x25
github.com/docker/compose/v2/pkg/progress.RunWithStatus({0x2bba6c8, 0xc000556510}, 0xc000a0eed0, 0xc0004117a0, {0x27d7fae, 0x7})
        github.com/docker/compose/v2/pkg/progress/writer.go:97 +0x225
github.com/docker/compose/v2/pkg/progress.Run({0x2bba6c8, 0xc000556510}, 0xc000710cc0, 0xc0004117a0)
        github.com/docker/compose/v2/pkg/progress/writer.go:61 +0x85
github.com/docker/compose/v2/pkg/compose.(*composeService).Up(0xc00014bf40, {0x2bba6c8, 0xc000556510}, _, {{0xc0002ca000, {0xc000715610, 0x0, 0x1}, 0x0, 0x0, ...}, ...})
        github.com/docker/compose/v2/pkg/compose/up.go:40 +0x213
github.com/docker/compose/v2/cmd/compose.runUp({_, _}, {_, _}, {_, _}, {0x0, 0x0, {0x27d632b, 0x6}, ...}, ...)
        github.com/docker/compose/v2/cmd/compose/up.go:319 +0xb54
github.com/docker/compose/v2/cmd/compose.upCommand.func2({0x2bba6c8, 0xc000556510}, 0xc00061b440, {0xc000715610, 0x0, 0x1})
        github.com/docker/compose/v2/cmd/compose/up.go:143 +0x29f
github.com/docker/compose/v2/cmd/compose.upCommand.(*ProjectOptions).WithServices.func5({0x2bba700, 0xc0002f4320}, {0xc000715610, 0x0, 0x1})
        github.com/docker/compose/v2/cmd/compose/compose.go:187 +0x22d
github.com/docker/compose/v2/cmd/compose.upCommand.(*ProjectOptions).WithServices.Adapt.func7({0x2bba700?, 0xc0002f4320?}, 0x2?, {0xc000715610?, 0x2b9f088?, 0x133397c?})
        github.com/docker/compose/v2/cmd/compose/compose.go:137 +0x30
github.com/docker/compose/v2/cmd/compose.upCommand.(*ProjectOptions).WithServices.Adapt.AdaptCmd.func8(0xc0001fcf08, {0xc000715610, 0x0, 0x1})
        github.com/docker/compose/v2/cmd/compose/compose.go:121 +0x143
github.com/docker/cli/cli-plugins/plugin.RunPlugin.func1.1.2(0xc0001fcf08, {0xc000715610, 0x0, 0x1})
        github.com/docker/cli@v28.1.0+incompatible/cli-plugins/plugin/plugin.go:65 +0x6c
github.com/docker/compose/v2/cmd/cmdtrace.Setup.wrapRunE.func2(0xc0001fcf08?, {0xc000715610?, 0x0?, 0x1?})
        github.com/docker/compose/v2/cmd/cmdtrace/cmd_span.go:85 +0x63
github.com/spf13/cobra.(*Command).execute(0xc0001fcf08, {0xc000412fc0, 0x1, 0x1})
        github.com/spf13/cobra@v1.9.1/command.go:1015 +0xa94
github.com/spf13/cobra.(*Command).ExecuteC(0xc00036af08)
        github.com/spf13/cobra@v1.9.1/command.go:1148 +0x40c
github.com/spf13/cobra.(*Command).Execute(...)
        github.com/spf13/cobra@v1.9.1/command.go:1071
github.com/docker/cli/cli-plugins/plugin.RunPlugin(0xc000251400, 0xc0001fc908, {{0x27d4d6a, 0x5}, {0x27dedc8, 0xb}, {0x2b8a0a8, 0x7}, {0x0, 0x0}, ...})
        github.com/docker/cli@v28.1.0+incompatible/cli-plugins/plugin/plugin.go:80 +0x145
github.com/docker/cli/cli-plugins/plugin.Run(0x2931458, {{0x27d4d6a, 0x5}, {0x27dedc8, 0xb}, {0x2b8a0a8, 0x7}, {0x0, 0x0}, {0x0, ...}})
        github.com/docker/cli@v28.1.0+incompatible/cli-plugins/plugin/plugin.go:95 +0x105
main.pluginMain()
        github.com/docker/compose/v2/cmd/main.go:38 +0xa5
main.main()
        github.com/docker/compose/v2/cmd/main.go:98 +0x19c

goroutine 11 [IO wait]:
internal/poll.runtime_pollWait(0x741ea68446b0, 0x72)
        runtime/netpoll.go:351 +0x85
internal/poll.(*pollDesc).wait(0xc000143e80?, 0xc00011efbf?, 0x0)
        internal/poll/fd_poll_runtime.go:84 +0x27
internal/poll.(*pollDesc).waitRead(...)
        internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc000143e80, {0xc00011efbf, 0x1, 0x1})
        internal/poll/fd_unix.go:165 +0x27a
net.(*netFD).Read(0xc000143e80, {0xc00011efbf?, 0x0?, 0x0?})
        net/fd_posix.go:55 +0x25
net.(*conn).Read(0xc0004b9680, {0xc00011efbf?, 0x0?, 0x0?})
        net/net.go:189 +0x45
github.com/docker/cli/cli-plugins/socket.ConnectAndWait.func1()
        github.com/docker/cli@v28.1.0+incompatible/cli-plugins/socket/socket.go:162 +0x45
created by github.com/docker/cli/cli-plugins/socket.ConnectAndWait in goroutine 1
        github.com/docker/cli@v28.1.0+incompatible/cli-plugins/socket/socket.go:159 +0x118

goroutine 22 [runnable]:
go.opentelemetry.io/otel/sdk/trace.(*batchSpanProcessor).processQueue(0xc0000e2780)
        go.opentelemetry.io/otel/sdk@v1.34.0/trace/batch_span_processor.go:302 +0x114
go.opentelemetry.io/otel/sdk/trace.NewBatchSpanProcessor.func1()
        go.opentelemetry.io/otel/sdk@v1.34.0/trace/batch_span_processor.go:117 +0x4e
created by go.opentelemetry.io/otel/sdk/trace.NewBatchSpanProcessor in goroutine 1
        go.opentelemetry.io/otel/sdk@v1.34.0/trace/batch_span_processor.go:115 +0x2e5

goroutine 50 [syscall]:
os/signal.signal_recv()
        runtime/sigqueue.go:152 +0x29
os/signal.loop()
        os/signal/signal_unix.go:23 +0x13
created by os/signal.Notify.func1.1 in goroutine 1
        os/signal/signal.go:151 +0x1f

goroutine 16 [chan receive]:
github.com/docker/compose/v2/cmd/compose.upCommand.AdaptCmd.func4.1()
        github.com/docker/compose/v2/cmd/compose/compose.go:115 +0x27
created by github.com/docker/compose/v2/cmd/compose.upCommand.AdaptCmd.func4 in goroutine 1
        github.com/docker/compose/v2/cmd/compose/compose.go:114 +0x10a

goroutine 66 [chan receive]:
github.com/docker/compose/v2/cmd/compose.upCommand.(*ProjectOptions).WithServices.Adapt.AdaptCmd.func8.1()
        github.com/docker/compose/v2/cmd/compose/compose.go:115 +0x27
created by github.com/docker/compose/v2/cmd/compose.upCommand.(*ProjectOptions).WithServices.Adapt.AdaptCmd.func8 in goroutine 1
        github.com/docker/compose/v2/cmd/compose/compose.go:114 +0x10a

goroutine 67 [select]:
github.com/docker/compose/v2/pkg/progress.(*ttyWriter).Start(0xc0001b4180, {0x2bba290, 0x4147d60})
        github.com/docker/compose/v2/pkg/progress/tty.go:54 +0xfa
github.com/docker/compose/v2/pkg/progress.RunWithStatus.func1()
        github.com/docker/compose/v2/pkg/progress/writer.go:83 +0x2a
golang.org/x/sync/errgroup.(*Group).Go.func1()
        golang.org/x/sync@v0.13.0/errgroup/errgroup.go:79 +0x50
created by golang.org/x/sync/errgroup.(*Group).Go in goroutine 1
        golang.org/x/sync@v0.13.0/errgroup/errgroup.go:76 +0x96

goroutine 68 [semacquire]:
sync.runtime_Semacquire(0xc0009b7968?)
        runtime/sema.go:71 +0x25
sync.(*WaitGroup).Wait(0x25d4c40?)
        sync/waitgroup.go:118 +0x48
golang.org/x/sync/errgroup.(*Group).Wait(0xc000766700)
        golang.org/x/sync@v0.13.0/errgroup/errgroup.go:56 +0x25
github.com/docker/compose/v2/pkg/progress.RunWithStatus({0x2bba6c8, 0xc00049aab0}, 0xc00035ec80, 0xc0004117a0, {0x27d7fae, 0x7})
        github.com/docker/compose/v2/pkg/progress/writer.go:97 +0x225
github.com/docker/compose/v2/pkg/progress.Run({0x2bba6c8, 0xc00049aab0}, 0xc00049ab10, 0xc0004117a0)
        github.com/docker/compose/v2/pkg/progress/writer.go:61 +0x85
github.com/docker/compose/v2/pkg/compose.(*composeService).pullRequiredImages(0xc00014bf40, {0x2bba6c8, 0xc00049aab0}, 0xc00061b440, 0xc00074bad0, 0x0)
        github.com/docker/compose/v2/pkg/compose/pull.go:320 +0x2ef
github.com/docker/compose/v2/pkg/compose.(*composeService).ensureImagesExists.func1({0x2bba6c8?, 0xc00049aab0?})
        github.com/docker/compose/v2/pkg/compose/build.go:278 +0x37
github.com/docker/compose/v2/pkg/compose.(*composeService).ensureImagesExists.SpanWrapFunc.func3({0x2bba6c8, 0xc00074baa0})
        github.com/docker/compose/v2/internal/tracing/wrap.go:43 +0x13d
github.com/docker/compose/v2/pkg/compose.(*composeService).ensureImagesExists(0xc00014bf40, {0x2bba6c8, 0xc00074baa0}, 0xc00061b440, 0xc0002ca000, 0x0)
        github.com/docker/compose/v2/pkg/compose/build.go:280 +0x29e
github.com/docker/compose/v2/pkg/compose.(*composeService).create(0xc00014bf40, {0x2bba6c8, 0xc00074baa0}, 0xc00061b440, {0xc0002ca000, {0xc0008d6400, 0x17, 0x20}, 0x0, 0x0, ...})
        github.com/docker/compose/v2/pkg/compose/create.go:83 +0xdf
github.com/docker/compose/v2/pkg/compose.(*composeService).Up.func1({0x2bba6c8, 0xc00074baa0})
        github.com/docker/compose/v2/pkg/compose/up.go:41 +0x85
github.com/docker/compose/v2/pkg/compose.(*composeService).Up.SpanWrapFunc.func5({0x2bba6c8, 0xc00074ba70})
        github.com/docker/compose/v2/internal/tracing/wrap.go:43 +0x13d
github.com/docker/compose/v2/pkg/progress.Run.func1({0x2bba6c8?, 0xc00074ba70?})
        github.com/docker/compose/v2/pkg/progress/writer.go:62 +0x22
github.com/docker/compose/v2/pkg/progress.RunWithStatus.func2()
        github.com/docker/compose/v2/pkg/progress/writer.go:90 +0x70
golang.org/x/sync/errgroup.(*Group).Go.func1()
        golang.org/x/sync@v0.13.0/errgroup/errgroup.go:79 +0x50
created by golang.org/x/sync/errgroup.(*Group).Go in goroutine 1
        golang.org/x/sync@v0.13.0/errgroup/errgroup.go:76 +0x96

goroutine 89 [select]:
github.com/docker/compose/v2/pkg/progress.(*ttyWriter).Start(0xc0001b5400, {0x2bba290, 0x4147d60})
        github.com/docker/compose/v2/pkg/progress/tty.go:54 +0xfa
github.com/docker/compose/v2/pkg/progress.RunWithStatus.func1()
        github.com/docker/compose/v2/pkg/progress/writer.go:83 +0x2a
golang.org/x/sync/errgroup.(*Group).Go.func1()
        golang.org/x/sync@v0.13.0/errgroup/errgroup.go:79 +0x50
created by golang.org/x/sync/errgroup.(*Group).Go in goroutine 68
        golang.org/x/sync@v0.13.0/errgroup/errgroup.go:76 +0x96

goroutine 159 [select]:
net/http.(*persistConn).readLoop(0xc0005d8120)
        net/http/transport.go:2231 +0x91d
created by net/http.(*Transport).dialConn in goroutine 60
        net/http/transport.go:1874 +0x154f

goroutine 163 [select]:
net/http.(*persistConn).writeLoop(0xc000834120)
        net/http/transport.go:2519 +0xe7
created by net/http.(*Transport).dialConn in goroutine 161
        net/http/transport.go:1875 +0x15a5

goroutine 96 [runnable]:
net/url.(*Error).Timeout(0x2b92e20?)
        net/url/url.go:34 +0x76
github.com/docker/docker/client.(*Client).doRequest(0xc000412fd0, 0xc000412fd0?)
        github.com/docker/docker@v28.1.0+incompatible/client/request.go:160 +0x2c3
github.com/docker/docker/client.(*Client).sendRequest(0xc000412fd0, {0x2bba700, 0xc0003c3d10}, {0x27d416e, 0x4}, {0x27e43ae?, 0x10?}, 0xc00006aa90?, {0x0, 0x0}, ...)
        github.com/docker/docker@v28.1.0+incompatible/client/request.go:117 +0xbe
github.com/docker/docker/client.(*Client).post(0xc000412fd0, {0x2bba700, 0xc0003c3d10}, {0x27e43ae, 0xe}, 0xc0005d2858, {0x0?, 0x0?}, 0xc0005d23b0?)
        github.com/docker/docker@v28.1.0+incompatible/client/request.go:38 +0xae
github.com/docker/docker/client.(*Client).tryImageCreate(...)
        github.com/docker/docker@v28.1.0+incompatible/client/image_create.go:37
github.com/docker/docker/client.(*Client).ImagePull(0xc000412fd0, {0x2bba700, 0xc0003c3d10}, {0xc000350060?, 0x0?}, {0x0, {0xc0005a60bc, 0x4}, 0x0, {0x0, ...}})
        github.com/docker/docker@v28.1.0+incompatible/client/image_pull.go:37 +0x46e
github.com/docker/compose/v2/pkg/compose.(*composeService).pullServiceImage(_, {_, _}, {{0xc0007e4700, 0x8}, {0x0, 0x0, 0x0}, 0x0, 0x0, ...}, ...)
        github.com/docker/compose/v2/pkg/compose/pull.go:201 +0x1c6
github.com/docker/compose/v2/pkg/compose.(*composeService).pullRequiredImages.func1.1()
        github.com/docker/compose/v2/pkg/compose/pull.go:327 +0x170
golang.org/x/sync/errgroup.(*Group).Go.func1()
        golang.org/x/sync@v0.13.0/errgroup/errgroup.go:79 +0x50
created by golang.org/x/sync/errgroup.(*Group).Go in goroutine 90
        golang.org/x/sync@v0.13.0/errgroup/errgroup.go:76 +0x96

goroutine 106 [runnable]:
net/http.(*persistConn).writeLoop(0xc0006faa20)
        net/http/transport.go:2519 +0xe7
created by net/http.(*Transport).dialConn in goroutine 104
        net/http/transport.go:1875 +0x15a5

goroutine 105 [select]:
net/http.(*persistConn).readLoop(0xc0006faa20)
        net/http/transport.go:2231 +0x91d
created by net/http.(*Transport).dialConn in goroutine 104
        net/http/transport.go:1874 +0x154f

goroutine 94 [chan receive]:
net/http.(*persistConn).mapRoundTripError(0xc0006faa20, 0xc0004486e0, 0x0, {0x2b915a0, 0x40cba60})
        net/http/transport.go:2126 +0x5e
net/http.(*persistConn).roundTrip(0xc0006faa20, 0xc0004486e0)
        net/http/transport.go:2784 +0xab9
net/http.(*Transport).roundTrip(0xc000408900, 0xc00014eb40)
        net/http/transport.go:644 +0xb91
net/http.(*Transport).RoundTrip(0xc0003b05a0?, 0x2bba6c8?)
        net/http/roundtrip.go:30 +0x13
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp.(*Transport).RoundTrip(0xc000413080, 0xc00014ea00)
        go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp@v0.56.0/transport.go:131 +0x7a3
net/http.send(0xc00014ea00, {0x2b91da0, 0xc000413080}, {0x417501?, 0xc000655fc8?, 0x0?})
        net/http/client.go:259 +0x5e4
net/http.(*Client).send(0xc00059ae40, 0xc00014ea00, {0xc000656098?, 0x46e9c5?, 0x0?})
        net/http/client.go:180 +0x98
net/http.(*Client).do(0xc00059ae40, 0xc00014ea00)
        net/http/client.go:731 +0x98b
net/http.(*Client).Do(...)
        net/http/client.go:590
github.com/docker/docker/client.(*Client).doRequest(0xc000412fd0, 0xc000412fd0?)
        github.com/docker/docker@v28.1.0+incompatible/client/request.go:131 +0x2b
github.com/docker/docker/client.(*Client).sendRequest(0xc000412fd0, {0x2bba700, 0xc0003c3d10}, {0x27d416e, 0x4}, {0x27e43ae?, 0x10?}, 0xc0007c0520?, {0x0, 0x0}, ...)
        github.com/docker/docker@v28.1.0+incompatible/client/request.go:117 +0xbe
github.com/docker/docker/client.(*Client).post(0xc000412fd0, {0x2bba700, 0xc0003c3d10}, {0x27e43ae, 0xe}, 0xc000656858, {0x0?, 0x0?}, 0x6f7cd0?)
        github.com/docker/docker@v28.1.0+incompatible/client/request.go:38 +0xae
github.com/docker/docker/client.(*Client).tryImageCreate(...)
        github.com/docker/docker@v28.1.0+incompatible/client/image_create.go:37
github.com/docker/docker/client.(*Client).ImagePull(0xc000412fd0, {0x2bba700, 0xc0003c3d10}, {0xc0001149e0?, 0x0?}, {0x0, {0xc000a0a16c, 0x4}, 0x0, {0x0, ...}})
        github.com/docker/docker@v28.1.0+incompatible/client/image_pull.go:37 +0x46e
github.com/docker/compose/v2/pkg/compose.(*composeService).pullServiceImage(_, {_, _}, {{0xc0007e4440, 0x6}, {0x0, 0x0, 0x0}, 0x0, 0x0, ...}, ...)
        github.com/docker/compose/v2/pkg/compose/pull.go:201 +0x1c6
github.com/docker/compose/v2/pkg/compose.(*composeService).pullRequiredImages.func1.1()
        github.com/docker/compose/v2/pkg/compose/pull.go:327 +0x170
golang.org/x/sync/errgroup.(*Group).Go.func1()
        golang.org/x/sync@v0.13.0/errgroup/errgroup.go:79 +0x50
created by golang.org/x/sync/errgroup.(*Group).Go in goroutine 90
        golang.org/x/sync@v0.13.0/errgroup/errgroup.go:76 +0x96

goroutine 162 [IO wait]:
internal/poll.runtime_pollWait(0x741ea6844480, 0x72)
        runtime/netpoll.go:351 +0x85
internal/poll.(*pollDesc).wait(0xc0002ca080?, 0xc00097d000?, 0x0)
        internal/poll/fd_poll_runtime.go:84 +0x27
internal/poll.(*pollDesc).waitRead(...)
        internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc0002ca080, {0xc00097d000, 0x1000, 0x1000})
        internal/poll/fd_unix.go:165 +0x27a
net.(*netFD).Read(0xc0002ca080, {0xc00097d000?, 0x0?, 0x2b915a0?})
        net/fd_posix.go:55 +0x25
net.(*conn).Read(0xc000708008, {0xc00097d000?, 0x0?, 0x0?})
        net/net.go:189 +0x45
net/http.(*persistConn).Read(0xc000834120, {0xc00097d000?, 0x7841c5?, 0x23877c0?})
        net/http/transport.go:2052 +0x4a
bufio.(*Reader).fill(0xc0000c2480)
        bufio/bufio.go:110 +0x103
bufio.(*Reader).Peek(0xc0000c2480, 0x1)
        bufio/bufio.go:148 +0x53
net/http.(*persistConn).readLoop(0xc000834120)
        net/http/transport.go:2205 +0x185
created by net/http.(*Transport).dialConn in goroutine 161
        net/http/transport.go:1874 +0x154f

goroutine 90 [semacquire]:
sync.runtime_Semacquire(0x2?)
        runtime/sema.go:71 +0x25
sync.(*WaitGroup).Wait(0xc00049aae0?)
        sync/waitgroup.go:118 +0x48
golang.org/x/sync/errgroup.(*Group).Wait(0xc000766780)
        golang.org/x/sync@v0.13.0/errgroup/errgroup.go:56 +0x25
github.com/docker/compose/v2/pkg/compose.(*composeService).pullRequiredImages.func1({0x2bba6c8, 0xc00049ab70})
        github.com/docker/compose/v2/pkg/compose/pull.go:340 +0x39b
github.com/docker/compose/v2/pkg/progress.Run.func1({0x2bba6c8?, 0xc00049ab70?})
        github.com/docker/compose/v2/pkg/progress/writer.go:62 +0x22
github.com/docker/compose/v2/pkg/progress.RunWithStatus.func2()
        github.com/docker/compose/v2/pkg/progress/writer.go:90 +0x70
golang.org/x/sync/errgroup.(*Group).Go.func1()
        golang.org/x/sync@v0.13.0/errgroup/errgroup.go:79 +0x50
created by golang.org/x/sync/errgroup.(*Group).Go in goroutine 68
        golang.org/x/sync@v0.13.0/errgroup/errgroup.go:76 +0x96

goroutine 134 [runnable]:
net/http.(*persistConn).readLoop(0xc000552120)
        net/http/transport.go:2231 +0x91d
created by net/http.(*Transport).dialConn in goroutine 133
        net/http/transport.go:1874 +0x154f

goroutine 149 [running]:
        goroutine running on other thread; stack unavailable
created by golang.org/x/sync/errgroup.(*Group).Go in goroutine 90
        golang.org/x/sync@v0.13.0/errgroup/errgroup.go:76 +0x96

goroutine 150 [chan receive]:
net/http.(*persistConn).mapRoundTripError(0xc0005d8120, 0xc0001b8a00, 0x0, {0x2b915a0, 0x40cba60})
        net/http/transport.go:2126 +0x5e
net/http.(*persistConn).roundTrip(0xc0005d8120, 0xc0001b8a00)
        net/http/transport.go:2784 +0xab9
net/http.(*Transport).roundTrip(0xc000408900, 0xc0005b08c0)
        net/http/transport.go:644 +0xb91
net/http.(*Transport).RoundTrip(0xc0005b45a0?, 0x2bba6c8?)
        net/http/roundtrip.go:30 +0x13
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp.(*Transport).RoundTrip(0xc000413080, 0xc0005b0780)
        go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp@v0.56.0/transport.go:131 +0x7a3
net/http.send(0xc0005b0780, {0x2b91da0, 0xc000413080}, {0x417501?, 0xc0005f3fc8?, 0x0?})
        net/http/client.go:259 +0x5e4
net/http.(*Client).send(0xc00059ae40, 0xc0005b0780, {0xc0005f4098?, 0x46e9c5?, 0x0?})
        net/http/client.go:180 +0x98
net/http.(*Client).do(0xc00059ae40, 0xc0005b0780)
        net/http/client.go:731 +0x98b
net/http.(*Client).Do(...)
        net/http/client.go:590
github.com/docker/docker/client.(*Client).doRequest(0xc000412fd0, 0xc000412fd0?)
        github.com/docker/docker@v28.1.0+incompatible/client/request.go:131 +0x2b
github.com/docker/docker/client.(*Client).sendRequest(0xc000412fd0, {0x2bba700, 0xc0003c3d10}, {0x27d416e, 0x4}, {0x27e43ae?, 0x10?}, 0xc00006ac50?, {0x0, 0x0}, ...)
        github.com/docker/docker@v28.1.0+incompatible/client/request.go:117 +0xbe
github.com/docker/docker/client.(*Client).post(0xc000412fd0, {0x2bba700, 0xc0003c3d10}, {0x27e43ae, 0xe}, 0xc0005f4858, {0x0?, 0x0?}, 0x22a0da9?)
        github.com/docker/docker@v28.1.0+incompatible/client/request.go:38 +0xae
github.com/docker/docker/client.(*Client).tryImageCreate(...)
        github.com/docker/docker@v28.1.0+incompatible/client/image_create.go:37
github.com/docker/docker/client.(*Client).ImagePull(0xc000412fd0, {0x2bba700, 0xc0003c3d10}, {0xc0003656f0?, 0x0?}, {0x0, {0xc0005a60fc, 0x4}, 0x0, {0x0, ...}})
        github.com/docker/docker@v28.1.0+incompatible/client/image_pull.go:37 +0x46e
github.com/docker/compose/v2/pkg/compose.(*composeService).pullServiceImage(_, {_, _}, {{0xc00013fe3a, 0x5}, {0x0, 0x0, 0x0}, 0x0, 0x0, ...}, ...)
        github.com/docker/compose/v2/pkg/compose/pull.go:201 +0x1c6
github.com/docker/compose/v2/pkg/compose.(*composeService).pullRequiredImages.func1.1()
        github.com/docker/compose/v2/pkg/compose/pull.go:327 +0x170
golang.org/x/sync/errgroup.(*Group).Go.func1()
        golang.org/x/sync@v0.13.0/errgroup/errgroup.go:79 +0x50
created by golang.org/x/sync/errgroup.(*Group).Go in goroutine 90
        golang.org/x/sync@v0.13.0/errgroup/errgroup.go:76 +0x96

goroutine 153 [runnable]:
fmt.(*pp).handleMethods(0xc00084aea0, 0x72a000?)
        fmt/print.go:663 +0x24a
fmt.(*pp).printArg(0xc00084aea0, {0x25876a0, 0xc000876770}, 0x73)
        fmt/print.go:756 +0x446
fmt.(*pp).doPrintf(0xc00084aea0, {0x27dbf6f, 0x9}, {0xc0008ea198, 0x3, 0x3})
        fmt/print.go:1074 +0x37e
fmt.Sprintf({0x27dbf6f, 0x9}, {0xc0008ea198, 0x3, 0x3})
        fmt/print.go:239 +0x53
net/url.(*Error).Error(0xc00049e000)
        net/url/url.go:31 +0xaa
github.com/docker/docker/client.(*Client).doRequest(0xc000412fd0, 0xc000412fd0?)
        github.com/docker/docker@v28.1.0+incompatible/client/request.go:163 +0x2dd
github.com/docker/docker/client.(*Client).sendRequest(0xc000412fd0, {0x2bba700, 0xc0003c3d10}, {0x27d416e, 0x4}, {0x27e43ae?, 0x10?}, 0xc000714380?, {0x0, 0x0}, ...)
        github.com/docker/docker@v28.1.0+incompatible/client/request.go:117 +0xbe
github.com/docker/docker/client.(*Client).post(0xc000412fd0, {0x2bba700, 0xc0003c3d10}, {0x27e43ae, 0xe}, 0xc0008ea858, {0x0?, 0x0?}, 0x741e5e3bdb48?)
        github.com/docker/docker@v28.1.0+incompatible/client/request.go:38 +0xae
github.com/docker/docker/client.(*Client).tryImageCreate(...)
        github.com/docker/docker@v28.1.0+incompatible/client/image_create.go:37
github.com/docker/docker/client.(*Client).ImagePull(0xc000412fd0, {0x2bba700, 0xc0003c3d10}, {0xc000350120?, 0x0?}, {0x0, {0xc000a0a15c, 0x4}, 0x0, {0x0, ...}})
        github.com/docker/docker@v28.1.0+incompatible/client/image_pull.go:37 +0x46e
github.com/docker/compose/v2/pkg/compose.(*composeService).pullServiceImage(_, {_, _}, {{0xc0007e4740, 0x8}, {0x0, 0x0, 0x0}, 0x0, 0x0, ...}, ...)
        github.com/docker/compose/v2/pkg/compose/pull.go:201 +0x1c6
github.com/docker/compose/v2/pkg/compose.(*composeService).pullRequiredImages.func1.1()
        github.com/docker/compose/v2/pkg/compose/pull.go:327 +0x170
golang.org/x/sync/errgroup.(*Group).Go.func1()
        golang.org/x/sync@v0.13.0/errgroup/errgroup.go:79 +0x50
created by golang.org/x/sync/errgroup.(*Group).Go in goroutine 90
        golang.org/x/sync@v0.13.0/errgroup/errgroup.go:76 +0x96

goroutine 154 [runnable]:
github.com/pkg/errors.callers()
        github.com/pkg/errors@v0.9.1/stack.go:167 +0x4a
github.com/pkg/errors.Wrap({0x2b92e20, 0xc00088c030}, {0x27f154b, 0x14})
        github.com/pkg/errors@v0.9.1/errors.go:194 +0x98
github.com/docker/docker/client.(*Client).doRequest(0xc000412fd0, 0xc000412fd0?)
        github.com/docker/docker@v28.1.0+incompatible/client/request.go:188 +0x3e5
github.com/docker/docker/client.(*Client).sendRequest(0xc000412fd0, {0x2bba700, 0xc0003c3d10}, {0x27d416e, 0x4}, {0x27e43ae?, 0x10?}, 0xc000116ad0?, {0x0, 0x0}, ...)
        github.com/docker/docker@v28.1.0+incompatible/client/request.go:117 +0xbe
github.com/docker/docker/client.(*Client).post(0xc000412fd0, {0x2bba700, 0xc0003c3d10}, {0x27e43ae, 0xe}, 0xc0005f0858, {0x0?, 0x0?}, 0xc000360fe0?)
        github.com/docker/docker@v28.1.0+incompatible/client/request.go:38 +0xae
github.com/docker/docker/client.(*Client).tryImageCreate(...)
        github.com/docker/docker@v28.1.0+incompatible/client/image_create.go:37
github.com/docker/docker/client.(*Client).ImagePull(0xc000412fd0, {0x2bba700, 0xc0003c3d10}, {0xc00013d380?, 0x0?}, {0x0, {0xc0003b227c, 0x4}, 0x0, {0x0, ...}})
        github.com/docker/docker@v28.1.0+incompatible/client/image_pull.go:37 +0x46e
github.com/docker/compose/v2/pkg/compose.(*composeService).pullServiceImage(_, {_, _}, {{0xc00025e555, 0x9}, {0x0, 0x0, 0x0}, 0x0, 0x0, ...}, ...)
        github.com/docker/compose/v2/pkg/compose/pull.go:201 +0x1c6
github.com/docker/compose/v2/pkg/compose.(*composeService).pullRequiredImages.func1.1()
        github.com/docker/compose/v2/pkg/compose/pull.go:327 +0x170
golang.org/x/sync/errgroup.(*Group).Go.func1()
        golang.org/x/sync@v0.13.0/errgroup/errgroup.go:79 +0x50
created by golang.org/x/sync/errgroup.(*Group).Go in goroutine 90
        golang.org/x/sync@v0.13.0/errgroup/errgroup.go:76 +0x96

goroutine 125 [runnable]:
net/http.(*persistConn).readLoop(0xc0005de000)
        net/http/transport.go:2231 +0x91d
created by net/http.(*Transport).dialConn in goroutine 124
        net/http/transport.go:1874 +0x154f

goroutine 157 [runnable]:
net/http.(*persistConn).readLoop(0xc000892900)
        net/http/transport.go:2231 +0x91d
created by net/http.(*Transport).dialConn in goroutine 56
        net/http/transport.go:1874 +0x154f

goroutine 139 [runnable]:
net/http.(*persistConn).readLoop(0xc000552240)
        net/http/transport.go:2231 +0x91d
created by net/http.(*Transport).dialConn in goroutine 138
        net/http/transport.go:1874 +0x154f

goroutine 160 [runnable]:
net/http.(*persistConn).writeLoop(0xc0005d8120)
        net/http/transport.go:2519 +0xe7
created by net/http.(*Transport).dialConn in goroutine 60
        net/http/transport.go:1875 +0x15a5

goroutine 142 [runnable]:
net/http.(*persistConn).readLoop(0xc000552360)
        net/http/transport.go:2231 +0x91d
created by net/http.(*Transport).dialConn in goroutine 141
        net/http/transport.go:1874 +0x154f

goroutine 62 [runnable]:
net/http.(*persistConn).readLoop(0xc0005d8240)
        net/http/transport.go:2231 +0x91d
created by net/http.(*Transport).dialConn in goroutine 61
        net/http/transport.go:1874 +0x154f

goroutine 149 [running]:
github.com/docker/compose/v2/pkg/compose.(*composeService).pullRequiredImages.func1.1()
        github.com/docker/compose/v2/pkg/compose/pull.go:328 +0x236
golang.org/x/sync/errgroup.(*Group).Go.func1()
        golang.org/x/sync@v0.13.0/errgroup/errgroup.go:79 +0x50
created by golang.org/x/sync/errgroup.(*Group).Go in goroutine 90
        golang.org/x/sync@v0.13.0/errgroup/errgroup.go:76 +0x96

Steps To Reproduce

No response

Compose Version

$ docker compose version
Docker Compose version v2.35.1

Docker Environment

$ docker info
Client: Docker Engine - Community
 Version:    28.1.1
 Context:    default
 Debug Mode: false
 Plugins:
  buildx: Docker Buildx (Docker Inc.)
    Version:  v0.23.0
    Path:     /usr/libexec/docker/cli-plugins/docker-buildx
  compose: Docker Compose (Docker Inc.)
    Version:  v2.35.1
    Path:     /usr/libexec/docker/cli-plugins/docker-compose

Server:
 Containers: 0
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 1
 Server Version: 28.1.1
 Storage Driver: overlay2
  Backing Filesystem: extfs
  Supports d_type: true
  Using metacopy: false
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file
 Cgroup Driver: systemd
 Cgroup Version: 2
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local splunk syslog
 Swarm: inactive
 Runtimes: runc io.containerd.runc.v2
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 05044ec0a9a75232cad458027ca83437aae3f4da
 runc version: v1.2.5-0-g59923ef
 init version: de40ad0
 Security Options:
  apparmor
  seccomp
   Profile: builtin
  cgroupns
 Kernel Version: 6.11.0-24-generic
 Operating System: Ubuntu 24.04.2 LTS
 OSType: linux
 Architecture: x86_64
 CPUs: 8
 Total Memory: 31.07GiB
 Name: x1
 ID: 1af6e0c7-4efd-44da-8056-80fe0ed03717
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Experimental: false
 Insecure Registries:
  ::1/128
  127.0.0.0/8
 Live Restore Enabled: false

Anything else?

No response

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions