moby / moby/moby

No option to disable IPv4 on default Docker bridge

Open
#52,225 6 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

area/networking area/networking/d/bridge area/networking/ipv6 kind/enhancement status/0-triage version/29.1
Dominant language
Go
Stars
72.1k
Forks
19.2k
Avg merge
1d 17h
Merged PRs (30d)
164

Description

Description

There is no way to disable IPv4 on Docker bridge if running in IPv6 only mode.

If I run IPv6 only through /etc/docker/daemon.json and create

{
  "ipv6": true,
  "default-address-pools": [
    { "base": "2602:fed2:7e02:0700::/56", "size": 64 }
  ],
  "default-network-opts": {"bridge":{"com.docker.network.enable_ipv6":"true","com.docker.network.enable_ipv4":"false"}},
  "experimental" : true,
  "ip6tables" : false
}

I get

Mar 25 08:50:53 rpi.priolkar.com dockerd[108568]: failed to start daemon: Error initializing network controller: error creating default "bridge" network: invalid address pool
Mar 25 08:50:53 rpi.priolkar.com systemd[1]: docker.service: Main process exited, code=exited, status=1/FAILURE
Reproduce
  1. Run docker with IPv6 only pool
  2. Docker fails to start due to default bridge needing IPv4 pool
Expected behavior

Docker bridge should run with IPv6 only address if IPv4 address is not available.

docker version
Client: Docker Engine - Community
 Version:           29.1.2
 API version:       1.52
 Go version:        go1.25.5
 Git commit:        890dcca
 Built:             Tue Dec  2 21:56:11 2025
 OS/Arch:           linux/arm64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          29.1.2
  API version:      1.52 (minimum version 1.44)
  Go version:       go1.25.5
  Git commit:       de45c2a
  Built:            Tue Dec  2 21:56:11 2025
  OS/Arch:          linux/arm64
  Experimental:     true
 containerd:
  Version:          v2.2.0
  GitCommit:        1c4457e00facac03ce1d75f7b6777a7a851e5c41
 runc:
  Version:          1.3.4
  GitCommit:        v1.3.4-0-gd6d73eb8
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
docker info
Client: Docker Engine - Community
 Version:    29.1.2
 Context:    default
 Debug Mode: false
 Plugins:
  buildx: Docker Buildx (Docker Inc.)
    Version:  v0.30.1
    Path:     /usr/libexec/docker/cli-plugins/docker-buildx
  compose: Docker Compose (Docker Inc.)
    Version:  v5.0.0
    Path:     /usr/libexec/docker/cli-plugins/docker-compose

Server:
 Containers: 6
  Running: 6
  Paused: 0
  Stopped: 0
 Images: 5
 Server Version: 29.1.2
 Storage Driver: overlayfs
  driver-type: io.containerd.snapshotter.v1
 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
 CDI spec directories:
  /etc/cdi
  /var/run/cdi
 Swarm: inactive
 Runtimes: runc io.containerd.runc.v2
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 1c4457e00facac03ce1d75f7b6777a7a851e5c41
 runc version: v1.3.4-0-gd6d73eb8
 init version: de40ad0
 Security Options:
  seccomp
   Profile: builtin
  cgroupns
 Kernel Version: 6.12.47+rpt-rpi-2712
 Operating System: Debian GNU/Linux 13 (trixie)
 OSType: linux
 Architecture: aarch64
 CPUs: 4
 Total Memory: 3.955GiB
 Name: rpi.priolkar.com
 ID: 2638c3ef-9ca8-475e-9503-a2a537844636
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Experimental: true
 Insecure Registries:
  ::1/128
  127.0.0.0/8
 Live Restore Enabled: false
 Default Address Pools:
   Base: 2602:fed2:7e02:700::/56, Size: 64
 Firewall Backend: iptables

[DEPRECATION NOTICE]: API is accessible on http://0.0.0.0:2375 without encryption.
         Access to the remote API is equivalent to root access on the host. Refer
         to the 'Docker daemon attack surface' section in the documentation for
         more information: https://docs.docker.com/go/attack-surface/
In future versions this will be a hard failure preventing the daemon from starting! Learn more at: https://docs.docker.com/go/api-security/
WARNING: No memory limit support
WARNING: No swap limit support
Additional Info

No response

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reproducing dockerd startup with the IPv6-only daemon.json configuration and follow default bridge network initialization until the invalid address pool error. Inspect the default bridge configuration and network-controller validation; done means the daemon starts and the default bridge operates with IPv6 only when IPv4 is disabled.

Written by the indexing model from the issue text.

Assessment

Tech stack
docker, go
Domain
infrastructure, networking
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.