No option to disable IPv4 on default Docker bridge
Open
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
- Run docker with IPv6 only pool
- 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
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- 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