moby: Panic in libnetwork during daemon start (panic: runtime error: index out of range [0] with length 0)

Description

_From https://forums.docker.com/t/dockerd-crashing-in-libnetwork-on-launch/134710_

I’ve recently started seeing a weird dockerd crash in libnetwork on start. I tried downgrading, but that didn’t help. I also tried uninstalling the Nvidia container tools. The only solution that fixed the crash was completely wiping away /var/lib/docker. The only container I am running on this daemon is Jellyfin. However, the problem returns on system reboot.

Reproduce

$ sudo dockerd
INFO[2023-02-19T17:29:03.455357713-05:00] Starting up
INFO[2023-02-19T17:29:03.456995192-05:00] [core] [Channel #1] Channel created           module=grpc
INFO[2023-02-19T17:29:03.457036179-05:00] [core] [Channel #1] original dial target is: "unix:///run/containerd/containerd.sock"  module=grpc
INFO[2023-02-19T17:29:03.457075584-05:00] [core] [Channel #1] parsed dial target is: {Scheme:unix Authority: Endpoint:run/containerd/containerd.sock URL:{Scheme:unix Opaque: User: Host: Path:/run/containerd/containerd.sock RawPath: OmitHost:false ForceQuery:false RawQuery: Fragment: RawFragment:}}  module=grpc
INFO[2023-02-19T17:29:03.457099058-05:00] [core] [Channel #1] Channel authority set to "localhost"  module=grpc
INFO[2023-02-19T17:29:03.457237128-05:00] [core] [Channel #1] Resolver state updated: {
  "Addresses": [
    {
      "Addr": "/run/containerd/containerd.sock",
      "ServerName": "",
      "Attributes": {},
      "BalancerAttributes": null,
      "Type": 0,
      "Metadata": null
    }
  ],
  "ServiceConfig": null,
  "Attributes": null
} (resolver returned new addresses)  module=grpc
INFO[2023-02-19T17:29:03.457335134-05:00] [core] [Channel #1] Channel switches to new LB policy "pick_first"  module=grpc
INFO[2023-02-19T17:29:03.457397451-05:00] [core] [Channel #1 SubChannel #2] Subchannel created  module=grpc
INFO[2023-02-19T17:29:03.457475959-05:00] [core] [Channel #1 SubChannel #2] Subchannel Connectivity change to CONNECTING  module=grpc
INFO[2023-02-19T17:29:03.457505585-05:00] [core] [Channel #1 SubChannel #2] Subchannel picks a new address "/run/containerd/containerd.sock" to connect  module=grpc
INFO[2023-02-19T17:29:03.457674493-05:00] [core] [Channel #1] Channel Connectivity change to CONNECTING  module=grpc
INFO[2023-02-19T17:29:03.457919766-05:00] [core] [Channel #1 SubChannel #2] Subchannel Connectivity change to READY  module=grpc
INFO[2023-02-19T17:29:03.457944513-05:00] [core] [Channel #1] Channel Connectivity change to READY  module=grpc
INFO[2023-02-19T17:29:03.458479222-05:00] [core] [Channel #4] Channel created           module=grpc
INFO[2023-02-19T17:29:03.458491565-05:00] [core] [Channel #4] original dial target is: "unix:///run/containerd/containerd.sock"  module=grpc
INFO[2023-02-19T17:29:03.458502737-05:00] [core] [Channel #4] parsed dial target is: {Scheme:unix Authority: Endpoint:run/containerd/containerd.sock URL:{Scheme:unix Opaque: User: Host: Path:/run/containerd/containerd.sock RawPath: OmitHost:false ForceQuery:false RawQuery: Fragment: RawFragment:}}  module=grpc
INFO[2023-02-19T17:29:03.458510812-05:00] [core] [Channel #4] Channel authority set to "localhost"  module=grpc
INFO[2023-02-19T17:29:03.458532703-05:00] [core] [Channel #4] Resolver state updated: {
  "Addresses": [
    {
      "Addr": "/run/containerd/containerd.sock",
      "ServerName": "",
      "Attributes": {},
      "BalancerAttributes": null,
      "Type": 0,
      "Metadata": null
    }
  ],
  "ServiceConfig": null,
  "Attributes": null
} (resolver returned new addresses)  module=grpc
INFO[2023-02-19T17:29:03.458550045-05:00] [core] [Channel #4] Channel switches to new LB policy "pick_first"  module=grpc
INFO[2023-02-19T17:29:03.458564683-05:00] [core] [Channel #4 SubChannel #5] Subchannel created  module=grpc
INFO[2023-02-19T17:29:03.458578569-05:00] [core] [Channel #4 SubChannel #5] Subchannel Connectivity change to CONNECTING  module=grpc
INFO[2023-02-19T17:29:03.458598016-05:00] [core] [Channel #4 SubChannel #5] Subchannel picks a new address "/run/containerd/containerd.sock" to connect  module=grpc
INFO[2023-02-19T17:29:03.458637110-05:00] [core] [Channel #4] Channel Connectivity change to CONNECTING  module=grpc
INFO[2023-02-19T17:29:03.458767345-05:00] [core] [Channel #4 SubChannel #5] Subchannel Connectivity change to READY  module=grpc
INFO[2023-02-19T17:29:03.458800679-05:00] [core] [Channel #4] Channel Connectivity change to READY  module=grpc
INFO[2023-02-19T17:29:03.474131360-05:00] [graphdriver] using prior storage driver: overlay2
INFO[2023-02-19T17:29:03.479738078-05:00] Loading containers: start.
INFO[2023-02-19T17:29:03.672352245-05:00] failed to read ipv6 net.ipv6.conf.<bridge>.accept_ra  bridge=docker0 syspath=/proc/sys/net/ipv6/conf/docker0/accept_ra
panic: runtime error: index out of range [0] with length 0

goroutine 1 [running]:
github.com/docker/docker/libnetwork.(*controller).reservePools(0x5626885d0300?)
	/go/src/github.com/docker/docker/libnetwork/controller.go:862 +0xb65
github.com/docker/docker/libnetwork.New({0xc000628230, 0x8, 0xe})
	/go/src/github.com/docker/docker/libnetwork/controller.go:233 +0x6bc
github.com/docker/docker/daemon.(*Daemon).initNetworkController(0xc000b3c000, 0xc000ccd590)
	/go/src/github.com/docker/docker/daemon/daemon_unix.go:851 +0x4e
github.com/docker/docker/daemon.(*Daemon).restore(0xc000b3c000)
	/go/src/github.com/docker/docker/daemon/daemon.go:478 +0x51d
github.com/docker/docker/daemon.NewDaemon({0x5626885e4b38?, 0xc000ea6640}, 0xc0008f5b80, 0xc0005d2090)
	/go/src/github.com/docker/docker/daemon/daemon.go:1085 +0x2b79
main.(*DaemonCli).start(0xc000cb8420, 0xc000b39490)
	/go/src/github.com/docker/docker/cmd/dockerd/daemon.go:200 +0x9f6
main.runDaemon(...)
	/go/src/github.com/docker/docker/cmd/dockerd/docker_unix.go:14
main.newDaemonCommand.func1(0xc000960c00?, {0x562689965730?, 0x0?, 0x0?})
	/go/src/github.com/docker/docker/cmd/dockerd/docker.go:38 +0x5e
github.com/docker/docker/vendor/github.com/spf13/cobra.(*Command).execute(0xc000960c00, {0xc000052240, 0x0, 0x0})
	/go/src/github.com/docker/docker/vendor/github.com/spf13/cobra/command.go:916 +0x862
github.com/docker/docker/vendor/github.com/spf13/cobra.(*Command).ExecuteC(0xc000960c00)
	/go/src/github.com/docker/docker/vendor/github.com/spf13/cobra/command.go:1044 +0x3bd
github.com/docker/docker/vendor/github.com/spf13/cobra.(*Command).Execute(...)
	/go/src/github.com/docker/docker/vendor/github.com/spf13/cobra/command.go:968
main.main()
	/go/src/github.com/docker/docker/cmd/dockerd/docker.go:102 +0x15d

Expected behavior

No response

docker version

Client: Docker Engine - Community
 Version:           23.0.1
 API version:       1.42
 Go version:        go1.19.5
 Git commit:        a5ee5b1
 Built:             Thu Feb  9 19:47:01 2023
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          23.0.1
  API version:      1.42 (minimum version 1.12)
  Go version:       go1.19.5
  Git commit:       bc3805a
  Built:            Thu Feb  9 19:47:01 2023
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.18
  GitCommit:        2456e983eb9e37e47538f59ea18f2043c9a73640
 runc:
  Version:          1.1.4
  GitCommit:        v1.1.4-0-g5fd4c4d
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

docker info

$ docker info
Client:
 Context:    default
 Debug Mode: false
 Plugins:
  buildx: Docker Buildx (Docker Inc.)
    Version:  v0.10.2
    Path:     /usr/libexec/docker/cli-plugins/docker-buildx
  compose: Docker Compose (Docker Inc.)
    Version:  v2.16.0
    Path:     /usr/libexec/docker/cli-plugins/docker-compose
  scan: Docker Scan (Docker Inc.)
    Version:  v0.23.0
    Path:     /usr/libexec/docker/cli-plugins/docker-scan

Server:
 Containers: 1
  Running: 1
  Paused: 0
  Stopped: 0
 Images: 1
 Server Version: 23.0.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 logentries splunk syslog
 Swarm: inactive
 Runtimes: nvidia runc io.containerd.runc.v2
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 2456e983eb9e37e47538f59ea18f2043c9a73640
 runc version: v1.1.4-0-g5fd4c4d
 init version: de40ad0
 Security Options:
  apparmor
  seccomp
   Profile: builtin
  cgroupns
 Kernel Version: 5.15.0-60-generic
 Operating System: Ubuntu 22.04.2 LTS
 OSType: linux
 Architecture: x86_64
 CPUs: 10
 Total Memory: 11.41GiB
 Name: carthage.lan
 ID: ZBCI:OVG2:MZ4Z:YKDJ:Z3T4:EG2G:NUWN:OQ2J:AIZW:62EC:IVJL:BZGJ
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Registry: https://index.docker.io/v1/
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Live Restore Enabled: false

Additional Info

No response

About this issue

  • Original URL
  • State: closed
  • Created a year ago
  • Reactions: 1
  • Comments: 20 (12 by maintainers)

Most upvoted comments

Yes, that’s as good as we can get without modifying docker-compose or dockerd. There’s no sign of the “failed to remove network” type error I was hoping for, which disproves my hypothesis. But I think I know what’s actually going on.

It looks like `ross-river` is doing everything twice, concurrently

Apr  4 21:09:10 SGb8cb299b3b5b ross-river[11679]: sdp_ndi-receiver_15
Apr  4 21:09:10 SGb8cb299b3b5b ross-river[11677]: sdp_ndi-receiver_15
Apr  4 21:09:10 SGb8cb299b3b5b dockerd[5029]: time="2023-04-04T21:09:10.332639174Z" level=debug msg="Calling DELETE /v1.41/containers/41bafe369e23056cedddd0d7670b2db2ab2c9eea1531d085baec6b4b8e7e35dc?force=1"
Apr  4 21:09:10 SGb8cb299b3b5b dockerd[5029]: time="2023-04-04T21:09:10.378699302Z" level=debug msg="Calling HEAD /_ping"
Apr  4 21:09:10 SGb8cb299b3b5b dockerd[5029]: time="2023-04-04T21:09:10.378711025Z" level=debug msg="Calling HEAD /_ping"
Apr  4 21:09:10 SGb8cb299b3b5b dockerd[5029]: time="2023-04-04T21:09:10.379077422Z" level=debug msg="Calling DELETE /v1.42/containers/sdp_ndi-receiver_15?force=1"
Apr  4 21:09:10 SGb8cb299b3b5b dockerd[5029]: time="2023-04-04T21:09:10.379081642Z" level=debug msg="Calling DELETE /v1.42/containers/sdp_ndi-receiver_15?force=1"
Apr  4 21:09:10 SGb8cb299b3b5b ross-river[11784]: Error response from daemon: No such container: sdp_ndi-receiver_15
Apr  4 21:09:10 SGb8cb299b3b5b ross-river[11783]: Error response from daemon: No such container: sdp_ndi-receiver_15

In particular, it appears to be invoking `docker-compose down` twice

Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13921]: compose.config.config.find: Using configuration files: /opt/ross/river/sdp/MD.yaml
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13920]: compose.config.config.find: Using configuration files: /opt/ross/river/sdp/MD.yaml
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13921]: compose.config.environment.__getitem__: The MFC_HOSTNAME variable is not set. Defaulting to a blank string.
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13921]: compose.config.environment.__getitem__: The MFC_NODE_ID variable is not set. Defaulting to a blank string.
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13921]: compose.config.environment.__getitem__: The MFC_DEBUG_MIDPLANE variable is not set. Defaulting to a blank string.
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13921]: compose.config.environment.__getitem__: The MFC_CTL_IF variable is not set. Defaulting to a blank string.
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13921]: compose.config.environment.__getitem__: The MFC_PTP_IF variable is not set. Defaulting to a blank string.
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13921]: compose.config.environment.__getitem__: The MFC_HIDE_SLOT variable is not set. Defaulting to a blank string.
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13921]: compose.config.environment.__getitem__: The MFC_HIDE_SLOT_PREFIX variable is not set. Defaulting to a blank string.
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13921]: compose.config.environment.__getitem__: The MFC_SLOT_NAME variable is not set. Defaulting to a blank string.
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13921]: compose.config.environment.__getitem__: The MFC_NODE_NAME variable is not set. Defaulting to a blank string.
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13921]: compose.config.environment.__getitem__: The MAX_SLOTS variable is not set. Defaulting to a blank string.
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13921]: compose.config.environment.__getitem__: The TIMING variable is not set. Defaulting to a blank string.
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13921]: compose.config.environment.__getitem__: The PRODUCT variable is not set. Defaulting to a blank string.
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13921]: compose.config.environment.__getitem__: The PRODUCT_VERSION variable is not set. Defaulting to a blank string.
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13921]: compose.config.environment.__getitem__: The PRODUCT_HASH variable is not set. Defaulting to a blank string.
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13921]: compose.config.environment.__getitem__: The LICENSING_MODE variable is not set. Defaulting to a blank string.
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13920]: compose.config.environment.__getitem__: The MFC_HOSTNAME variable is not set. Defaulting to a blank string.
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13920]: compose.config.environment.__getitem__: The MFC_NODE_ID variable is not set. Defaulting to a blank string.
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13920]: compose.config.environment.__getitem__: The MFC_DEBUG_MIDPLANE variable is not set. Defaulting to a blank string.
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13920]: compose.config.environment.__getitem__: The MFC_CTL_IF variable is not set. Defaulting to a blank string.
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13920]: compose.config.environment.__getitem__: The MFC_PTP_IF variable is not set. Defaulting to a blank string.
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13920]: compose.config.environment.__getitem__: The MFC_HIDE_SLOT variable is not set. Defaulting to a blank string.
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13920]: compose.config.environment.__getitem__: The MFC_HIDE_SLOT_PREFIX variable is not set. Defaulting to a blank string.
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13920]: compose.config.environment.__getitem__: The MFC_SLOT_NAME variable is not set. Defaulting to a blank string.
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13920]: compose.config.environment.__getitem__: The MFC_NODE_NAME variable is not set. Defaulting to a blank string.
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13920]: compose.config.environment.__getitem__: The MAX_SLOTS variable is not set. Defaulting to a blank string.
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13920]: compose.config.environment.__getitem__: The TIMING variable is not set. Defaulting to a blank string.
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13920]: compose.config.environment.__getitem__: The PRODUCT variable is not set. Defaulting to a blank string.
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13920]: compose.config.environment.__getitem__: The PRODUCT_VERSION variable is not set. Defaulting to a blank string.
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13920]: compose.config.environment.__getitem__: The PRODUCT_HASH variable is not set. Defaulting to a blank string.
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13920]: compose.config.environment.__getitem__: The LICENSING_MODE variable is not set. Defaulting to a blank string.
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13920]: docker.utils.config.find_config_file: Trying paths: ['/root/.docker/config.json', '/root/.dockercfg']
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13920]: docker.utils.config.find_config_file: No config file found
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13920]: docker.utils.config.find_config_file: Trying paths: ['/root/.docker/config.json', '/root/.dockercfg']
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13920]: docker.utils.config.find_config_file: No config file found
Apr  4 21:09:27 SGb8cb299b3b5b dockerd[5029]: time="2023-04-04T21:09:27.763226771Z" level=debug msg="Calling GET /v1.25/version"
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13921]: docker.utils.config.find_config_file: Trying paths: ['/root/.docker/config.json', '/root/.dockercfg']
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13921]: docker.utils.config.find_config_file: No config file found
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13921]: docker.utils.config.find_config_file: Trying paths: ['/root/.docker/config.json', '/root/.dockercfg']
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13921]: docker.utils.config.find_config_file: No config file found
Apr  4 21:09:27 SGb8cb299b3b5b dockerd[5029]: time="2023-04-04T21:09:27.765128775Z" level=debug msg="Calling GET /v1.25/version"
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13920]: urllib3.connectionpool._make_request: http://localhost:None "GET /v1.25/version HTTP/1.1" 200 822
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13920]: compose.cli.command.get_client: docker-compose version 1.25.0, build unknown
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13920]: docker-py version: 4.1.0
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13920]: CPython version: 3.8.10
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13920]: OpenSSL version: OpenSSL 1.1.1f  31 Mar 2020
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13920]: compose.cli.command.get_client: Docker base_url: http+docker://localhost
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13920]: compose.cli.command.get_client: Docker version: Platform={'Name': 'Docker Engine - Community'}, Components=[{'Name': 'Engine', 'Version': '23.0.2', 'Details': {'ApiVersion': '1.42', 'Arch': 'amd64', 'BuildTime': '2023-03-27T16:16:18.000000000+00:00', 'Experimental': 'false', 'GitCommit': '219f21b', 'GoVersion': 'go1.19.7', 'KernelVersion': '5.4.0-146-generic', 'MinAPIVersion': '1.12', 'Os': 'linux'}}, {'Name': 'containerd', 'Version': '1.6.20', 'Details': {'GitCommit': '2806fc1057397dbaeefbea0e4e17bddfbd388f38'}}, {'Name': 'runc', 'Version': '1.1.5', 'Details': {'GitCommit': 'v1.1.5-0-gf19387a'}}, {'Name': 'docker-init', 'Version': '0.19.0', 'Details': {'GitCommit': 'de40ad0'}}], Version=23.0.2, ApiVersion=1.42, MinAPIVersion=1.12, GitCommit=219f21b, GoVersion=go1.19.7, Os=linux, Arch=amd64, KernelVersion=5.4.0-146-generic, BuildTime=2023-03-27T16:16:18.000000000+00:00
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13920]: compose.cli.verbose_proxy.proxy_callable: docker inspect_network <- ('sdp_backend')
Apr  4 21:09:27 SGb8cb299b3b5b dockerd[5029]: time="2023-04-04T21:09:27.768268160Z" level=debug msg="Calling GET /v1.25/networks/sdp_backend"
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13920]: urllib3.connectionpool._make_request: http://localhost:None "GET /v1.25/networks/sdp_backend HTTP/1.1" 200 567
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13921]: urllib3.connectionpool._make_request: http://localhost:None "GET /v1.25/version HTTP/1.1" 200 822
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13921]: compose.cli.command.get_client: docker-compose version 1.25.0, build unknown
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13921]: docker-py version: 4.1.0
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13921]: CPython version: 3.8.10
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13921]: OpenSSL version: OpenSSL 1.1.1f  31 Mar 2020
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13921]: compose.cli.command.get_client: Docker base_url: http+docker://localhost

The logs are consistent with two instances of docker-compose down racing to tear down the stack.

Racing to delete the `sdp_backend` network:

The “Calling DELETE…” debug logs from dockerd mark the API request being received, and the urllib3.connectionpool._make_request debug logs from docker-compose (via ross-river) mark the API response being received. Note the HTTP status code.

It looks like (the docker-compose process whose logs are being relayed through) thread 13920 wins the race to delete the network. While the daemon is working on deleting the network, 13921 also tries to delete it and gets a 404 response. A short time later the network delete which 13920 requested completes, receiving an HTTP 204 response.

Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13920]: compose.network.remove: Removing network sdp_backend
[...]
Apr  4 21:09:27 SGb8cb299b3b5b dockerd[5029]: time="2023-04-04T21:09:27.824875461Z" level=debug msg="Calling DELETE /v1.25/networks/sdp_backend"
[...]
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13921]: compose.network.remove: Removing network sdp_backend
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13921]: compose.cli.verbose_proxy.proxy_callable: docker remove_network <- ('sdp_backend')
Apr  4 21:09:27 SGb8cb299b3b5b dockerd[5029]: time="2023-04-04T21:09:27.825453374Z" level=debug msg="releasing IPv4 pools from network sdp_backend (2d058bd4ea0e91d7cca71b141d1274bee820e164ad03fd593f077c802f762f5b)"
Apr  4 21:09:27 SGb8cb299b3b5b dockerd[5029]: time="2023-04-04T21:09:27.825462722Z" level=debug msg="ReleaseAddress(LocalDefault/192.168.221.0/24, 192.168.221.1)"
Apr  4 21:09:27 SGb8cb299b3b5b dockerd[5029]: time="2023-04-04T21:09:27.825474162Z" level=debug msg="Released address PoolID:LocalDefault/192.168.221.0/24, Address:192.168.221.1 Sequence:App: ipam/default/data, ID: LocalDefault/192.168.221.0/24, DBIndex: 0x0, Bits: 256, Unselected: 253, Sequence: (0xc0000000, 1)->(0x0, 6)->(0x1, 1)->end Curr:4"
Apr  4 21:09:27 SGb8cb299b3b5b dockerd[5029]: time="2023-04-04T21:09:27.825493950Z" level=debug msg="ReleasePool(LocalDefault/192.168.221.0/24)"
Apr  4 21:09:27 SGb8cb299b3b5b dockerd[5029]: time="2023-04-04T21:09:27.825727686Z" level=debug msg="cleanupServiceDiscovery for network:2d058bd4ea0e91d7cca71b141d1274bee820e164ad03fd593f077c802f762f5b"
[...]
Apr  4 21:09:27 SGb8cb299b3b5b dockerd[5029]: time="2023-04-04T21:09:27.826429783Z" level=debug msg="Calling DELETE /v1.25/networks/sdp_backend"
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13921]: urllib3.connectionpool._make_request: http://localhost:None "DELETE /v1.25/networks/sdp_backend HTTP/1.1" 404 44
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13921]: compose.network.remove: Network sdp_backend not found.
[...]
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13920]: urllib3.connectionpool._make_request: http://localhost:None "DELETE /v1.25/networks/sdp_backend HTTP/1.1" 204 0

The logs around deleting the `sdp_servicebus` network might be the smoking gun.

Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13921]: compose.cli.verbose_proxy.proxy_callable: docker remove_network <- ('sdp_servicebus')
Apr  4 21:09:27 SGb8cb299b3b5b dockerd[5029]: time="2023-04-04T21:09:27.827587105Z" level=debug msg="Calling DELETE /v1.25/networks/sdp_servicebus"
Apr  4 21:09:27 SGb8cb299b3b5b dockerd[5029]: time="2023-04-04T21:09:27.828014931Z" level=debug msg="releasing IPv4 pools from network sdp_servicebus (26d176d590ebe13e76c680a444b7007714c426aecefc616adde1cf8740c668a1)"
Apr  4 21:09:27 SGb8cb299b3b5b dockerd[5029]: time="2023-04-04T21:09:27.828037841Z" level=debug msg="ReleaseAddress(LocalDefault/192.168.222.0/24, 192.168.222.1)"
Apr  4 21:09:27 SGb8cb299b3b5b dockerd[5029]: time="2023-04-04T21:09:27.828054538Z" level=debug msg="Released address PoolID:LocalDefault/192.168.222.0/24, Address:192.168.222.1 Sequence:App: ipam/default/data, ID: LocalDefault/192.168.222.0/24, DBIndex: 0x0, Bits: 256, Unselected: 253, Sequence: (0xc0000000, 1)->(0x0, 6)->(0x1, 1)->end Curr:4"
Apr  4 21:09:27 SGb8cb299b3b5b dockerd[5029]: time="2023-04-04T21:09:27.828065925Z" level=debug msg="ReleasePool(LocalDefault/192.168.222.0/24)"
Apr  4 21:09:27 SGb8cb299b3b5b dockerd[5029]: time="2023-04-04T21:09:27.828303694Z" level=debug msg="cleanupServiceDiscovery for network:26d176d590ebe13e76c680a444b7007714c426aecefc616adde1cf8740c668a1"
Apr  4 21:09:27 SGb8cb299b3b5b avahi-daemon[863]: Interface backend.IPv4 no longer relevant for mDNS.
Apr  4 21:09:27 SGb8cb299b3b5b avahi-daemon[863]: Leaving mDNS multicast group on interface backend.IPv4 with address 192.168.221.1.
Apr  4 21:09:27 SGb8cb299b3b5b avahi-daemon[863]: Withdrawing address record for fe80::42:40ff:fe64:923 on backend.
Apr  4 21:09:27 SGb8cb299b3b5b avahi-daemon[863]: Withdrawing address record for 192.168.221.1 on backend.
Apr  4 21:09:27 SGb8cb299b3b5b NetworkManager[2349]: <info>  [1680642567.9123] device (backend): state change: activated -> unmanaged (reason 'unmanaged', sys-iface-state: 'removed')
Apr  4 21:09:27 SGb8cb299b3b5b dbus-daemon[864]: [system] Activating via systemd: service name='org.freedesktop.nm_dispatcher' unit='dbus-org.freedesktop.nm-dispatcher.service' requested by ':1.39' (uid=0 pid=2349 comm="/usr/sbin/NetworkManager --no-daemon " label="unconfined")
Apr  4 21:09:27 SGb8cb299b3b5b systemd[1]: Starting Network Manager Script Dispatcher Service...
Apr  4 21:09:27 SGb8cb299b3b5b dbus-daemon[864]: [system] Successfully activated service 'org.freedesktop.nm_dispatcher'
Apr  4 21:09:27 SGb8cb299b3b5b systemd[1]: Started Network Manager Script Dispatcher Service.
Apr  4 21:09:27 SGb8cb299b3b5b nm-dispatcher[13945]: run-parts: failed to stat component /etc/network/if-post-down.d/avahi-daemon: No such file or directory
Apr  4 21:09:27 SGb8cb299b3b5b dockerd[5029]: time="2023-04-04T21:09:27.942519584Z" level=debug msg="/usr/sbin/iptables, [--wait -t nat -C POSTROUTING -s 192.168.221.0/24 ! -o backend -j MASQUERADE]"
Apr  4 21:09:27 SGb8cb299b3b5b dockerd[5029]: time="2023-04-04T21:09:27.943509647Z" level=debug msg="/usr/sbin/iptables, [--wait -t nat -D POSTROUTING -s 192.168.221.0/24 ! -o backend -j MASQUERADE]"
Apr  4 21:09:27 SGb8cb299b3b5b dockerd[5029]: time="2023-04-04T21:09:27.944468245Z" level=debug msg="/usr/sbin/iptables, [--wait -t nat -C DOCKER -i backend -j RETURN]"
Apr  4 21:09:27 SGb8cb299b3b5b dockerd[5029]: time="2023-04-04T21:09:27.945163948Z" level=debug msg="/usr/sbin/iptables, [--wait -t nat -D DOCKER -i backend -j RETURN]"
Apr  4 21:09:27 SGb8cb299b3b5b dockerd[5029]: time="2023-04-04T21:09:27.946112679Z" level=debug msg="/usr/sbin/iptables, [--wait -t nat -C POSTROUTING -m addrtype --src-type LOCAL -o backend -j MASQUERADE]"
Apr  4 21:09:27 SGb8cb299b3b5b dockerd[5029]: time="2023-04-04T21:09:27.947161410Z" level=debug msg="/usr/sbin/iptables, [--wait -t filter -C FORWARD -i backend -o backend -j ACCEPT]"
Apr  4 21:09:27 SGb8cb299b3b5b dockerd[5029]: time="2023-04-04T21:09:27.947955340Z" level=debug msg="/usr/sbin/iptables, [--wait -D FORWARD -i backend -o backend -j ACCEPT]"
Apr  4 21:09:27 SGb8cb299b3b5b dockerd[5029]: time="2023-04-04T21:09:27.948929011Z" level=debug msg="/usr/sbin/iptables, [--wait -t filter -C FORWARD -i backend ! -o backend -j ACCEPT]"
Apr  4 21:09:27 SGb8cb299b3b5b dockerd[5029]: time="2023-04-04T21:09:27.949722591Z" level=debug msg="/usr/sbin/iptables, [--wait -D FORWARD -i backend ! -o backend -j ACCEPT]"
Apr  4 21:09:27 SGb8cb299b3b5b dockerd[5029]: time="2023-04-04T21:09:27.950536248Z" level=debug msg="/usr/sbin/iptables, [--wait -t filter -C FORWARD -o backend -j DOCKER]"
Apr  4 21:09:27 SGb8cb299b3b5b dockerd[5029]: time="2023-04-04T21:09:27.951360594Z" level=debug msg="/usr/sbin/iptables, [--wait -t filter -C FORWARD -o backend -j DOCKER]"
Apr  4 21:09:27 SGb8cb299b3b5b dockerd[5029]: time="2023-04-04T21:09:27.952166133Z" level=debug msg="/usr/sbin/iptables, [--wait -D FORWARD -o backend -j DOCKER]"
Apr  4 21:09:27 SGb8cb299b3b5b dockerd[5029]: time="2023-04-04T21:09:27.952953845Z" level=debug msg="/usr/sbin/iptables, [--wait -t filter -C FORWARD -o backend -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT]"
Apr  4 21:09:27 SGb8cb299b3b5b dockerd[5029]: time="2023-04-04T21:09:27.953882464Z" level=debug msg="/usr/sbin/iptables, [--wait -t filter -C FORWARD -o backend -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT]"
Apr  4 21:09:27 SGb8cb299b3b5b dockerd[5029]: time="2023-04-04T21:09:27.955078373Z" level=debug msg="/usr/sbin/iptables, [--wait -D FORWARD -o backend -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT]"
Apr  4 21:09:27 SGb8cb299b3b5b dockerd[5029]: time="2023-04-04T21:09:27.956003972Z" level=debug msg="/usr/sbin/iptables, [--wait -t filter -C DOCKER-ISOLATION-STAGE-1 -i backend ! -o backend -j DOCKER-ISOLATION-STAGE-2]"
Apr  4 21:09:27 SGb8cb299b3b5b dockerd[5029]: time="2023-04-04T21:09:27.956700305Z" level=debug msg="/usr/sbin/iptables, [--wait -t filter -D DOCKER-ISOLATION-STAGE-1 -i backend ! -o backend -j DOCKER-ISOLATION-STAGE-2]"
Apr  4 21:09:27 SGb8cb299b3b5b dockerd[5029]: time="2023-04-04T21:09:27.957456556Z" level=debug msg="/usr/sbin/iptables, [--wait -t filter -C DOCKER-ISOLATION-STAGE-2 -o backend -j DROP]"
Apr  4 21:09:27 SGb8cb299b3b5b dockerd[5029]: time="2023-04-04T21:09:27.958162252Z" level=debug msg="/usr/sbin/iptables, [--wait -t filter -D DOCKER-ISOLATION-STAGE-2 -o backend -j DROP]"
Apr  4 21:09:27 SGb8cb299b3b5b avahi-daemon[863]: Interface br-26d176d590eb.IPv6 no longer relevant for mDNS.
Apr  4 21:09:27 SGb8cb299b3b5b avahi-daemon[863]: Leaving mDNS multicast group on interface br-26d176d590eb.IPv6 with address fe80::42:48ff:fea8:a872.
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13920]: urllib3.connectionpool._make_request: http://localhost:None "DELETE /v1.25/networks/sdp_backend HTTP/1.1" 204 0
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13920]: compose.cli.verbose_proxy.proxy_callable: docker remove_network -> None
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13920]: compose.network.remove: Removing network sdp_servicebus
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13920]: compose.cli.verbose_proxy.proxy_callable: docker remove_network <- ('sdp_servicebus')
Apr  4 21:09:27 SGb8cb299b3b5b dockerd[5029]: time="2023-04-04T21:09:27.960859027Z" level=debug msg="Calling DELETE /v1.25/networks/sdp_servicebus"
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13920]: urllib3.connectionpool._make_request: http://localhost:None "DELETE /v1.25/networks/sdp_servicebus HTTP/1.1" 404 47
Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13920]: compose.network.remove: Network sdp_servicebus not found.
Apr  4 21:09:27 SGb8cb299b3b5b systemd[1]: Stopping Docker Application Container Engine...
Apr  4 21:09:27 SGb8cb299b3b5b dockerd[5029]: time="2023-04-04T21:09:27.987722804Z" level=info msg="Processing signal 'terminated'"
Apr  4 21:09:27 SGb8cb299b3b5b dockerd[5029]: time="2023-04-04T21:09:27.987791480Z" level=debug msg="daemon configured with a 15 seconds minimum shutdown timeout"
Apr  4 21:09:27 SGb8cb299b3b5b dockerd[5029]: time="2023-04-04T21:09:27.987837326Z" level=debug msg="start clean shutdown of all containers with a 15 seconds timeout..."
Apr  4 21:09:27 SGb8cb299b3b5b dockerd[5029]: time="2023-04-04T21:09:27.991420521Z" level=debug msg="Unix socket /var/run/docker/libnetwork/55d71602060c.sock doesn't exist. cannot accept client connections"
Apr  4 21:09:27 SGb8cb299b3b5b dockerd[5029]: time="2023-04-04T21:09:27.991453471Z" level=info msg="[core] [Channel #1] Channel Connectivity change to SHUTDOWN" module=grpc
Apr  4 21:09:27 SGb8cb299b3b5b dockerd[5029]: time="2023-04-04T21:09:27.991467013Z" level=info msg="[core] [Channel #1 SubChannel #2] Subchannel Connectivity change to SHUTDOWN" module=grpc
Apr  4 21:09:27 SGb8cb299b3b5b dockerd[5029]: time="2023-04-04T21:09:27.991476950Z" level=info msg="[core] [Channel #1 SubChannel #2] Subchannel deleted" module=grpc
Apr  4 21:09:27 SGb8cb299b3b5b dockerd[5029]: time="2023-04-04T21:09:27.991483260Z" level=info msg="[core] [Channel #1] Channel deleted" module=grpc
Apr  4 21:09:27 SGb8cb299b3b5b dockerd[5029]: time="2023-04-04T21:09:27.991491084Z" level=debug msg="Cleaning up old mountid : start."
Apr  4 21:09:27 SGb8cb299b3b5b dockerd[5029]: time="2023-04-04T21:09:27.991538229Z" level=info msg="stopping event stream following graceful shutdown" error="<nil>" module=libcontainerd namespace=moby
Apr  4 21:09:27 SGb8cb299b3b5b dockerd[5029]: time="2023-04-04T21:09:27.991764157Z" level=debug msg="Cleaning up old mountid : done."
Apr  4 21:09:27 SGb8cb299b3b5b dockerd[5029]: time="2023-04-04T21:09:27.991881848Z" level=debug msg="Clean shutdown succeeded"
Apr  4 21:09:27 SGb8cb299b3b5b dockerd[5029]: time="2023-04-04T21:09:27.991891628Z" level=info msg="Daemon shutdown complete"
Apr  4 21:09:28 SGb8cb299b3b5b avahi-daemon[863]: Interface br-26d176d590eb.IPv4 no longer relevant for mDNS.
Apr  4 21:09:28 SGb8cb299b3b5b avahi-daemon[863]: Leaving mDNS multicast group on interface br-26d176d590eb.IPv4 with address 192.168.222.1.
Apr  4 21:09:28 SGb8cb299b3b5b avahi-daemon[863]: Withdrawing address record for fe80::42:48ff:fea8:a872 on br-26d176d590eb.
Apr  4 21:09:28 SGb8cb299b3b5b avahi-daemon[863]: Withdrawing address record for 192.168.222.1 on br-26d176d590eb.
Apr  4 21:09:28 SGb8cb299b3b5b NetworkManager[2349]: <info>  [1680642568.0489] device (br-26d176d590eb): state change: activated -> unmanaged (reason 'unmanaged', sys-iface-state: 'removed')
Apr  4 21:09:28 SGb8cb299b3b5b nm-dispatcher[13970]: run-parts: failed to stat component /etc/network/if-post-down.d/avahi-daemon: No such file or directory
Apr  4 21:09:28 SGb8cb299b3b5b systemd[1]: docker.service: Succeeded.
Apr  4 21:09:28 SGb8cb299b3b5b ross-river[13921]: compose.cli.errors.exit_with_error: Couldn't connect to Docker daemon at http+docker://localhost - is it running?
Apr  4 21:09:28 SGb8cb299b3b5b ross-river[13921]: If it's at a non-standard location, specify the URL with the DOCKER_HOST environment variable.
Apr  4 21:09:28 SGb8cb299b3b5b systemd[1]: Stopped Docker Application Container Engine.
Apr  4 21:09:28 SGb8cb299b3b5b ross-river[13967]: Warning: Stopping docker.service, but it can still be activated by:
Apr  4 21:09:28 SGb8cb299b3b5b ross-river[13967]:   docker.socket
Apr  4 21:09:28 SGb8cb299b3b5b root: INFO - RIVER: Starting River...
Apr  4 21:09:28 SGb8cb299b3b5b ross-river[13986]: Warning: Stopping docker.service, but it can still be activated by:
Apr  4 21:09:28 SGb8cb299b3b5b ross-river[13986]:   docker.socket

Unlike the sdp_backend deletion, there is no HTTP 204 response for deleting sdp_servicebus. There is, however, this log from the same thread ID as the race winner:

Apr  4 21:09:27 SGb8cb299b3b5b ross-river[13921]: compose.cli.verbose_proxy.proxy_callable: docker remove_network <- ('sdp_servicebus')
Apr  4 21:09:27 SGb8cb299b3b5b dockerd[5029]: time="2023-04-04T21:09:27.827587105Z" level=debug msg="Calling DELETE /v1.25/networks/sdp_servicebus"
Apr  4 21:09:27 SGb8cb299b3b5b dockerd[5029]: time="2023-04-04T21:09:27.828014931Z" level=debug msg="releasing IPv4 pools from network sdp_servicebus (26d176d590ebe13e76c680a444b7007714c426aecefc616adde1cf8740c668a1)"
[...]
Apr  4 21:09:28 SGb8cb299b3b5b ross-river[13921]: compose.cli.errors.exit_with_error: Couldn't connect to Docker daemon at http+docker://localhost - is it running?

What I think is happening is that there are two actors concurrently racing to do the equivalent of docker-compose down; systemctl stop docker.service, which is resulting in the daemon being shut down while one of the networks is still in the process of being deleted. The daemon is not shutting down as gracefully as intended—exiting before all in-flight API requests complete—killing the network delete operation before it has the chance to delete the network object from the datastore. If true, there are two bugs in the daemon:

  1. libnetwork persists the network object to the datastore in an inconsistent state in the middle of deleting the network, leaving a persisted network which crashes the daemon on restore unless it is allowed to run to completion.
  2. The daemon doesn’t wait for in-flight requests to be handled to completion before exiting.

To work around these issues, stop racing multiple docker-compose down instances or at least ensure that all instances run to completion before shutting down the daemon.