Failed to start docker.service

Fedora Linux 42

SYMPTOMS

After a release upgrade 40 -> 42, the docker.service cannot start.

~]$ sudo systemctl status docker.service
× docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; preset: disabled)
Drop-In: /usr/lib/systemd/system/service.d
└─10-timeout-abort.conf, 50-keep-warm.conf
Active: failed (Result: exit-code) since Thu 2025-07-17 14:42:21 CST; 6min ago
Invocation: 165514ad6ecd43188ab3f809baf5da6d
TriggeredBy: × docker.socket
Docs: https://docs.docker.com
Process: 3225 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock (code=exited, status=1/FAILURE)
Main PID: 3225 (code=exited, status=1/FAILURE)

Jul 17 14:42:21 fedora systemd[1]: docker.service: Scheduled restart job, restart counter is at 3.
Jul 17 14:42:21 fedora systemd[1]: docker.service: Start request repeated too quickly.
Jul 17 14:42:21 fedora systemd[1]: docker.service: Failed with result 'exit-code'.
Jul 17 14:42:21 fedora systemd[1]: Failed to start docker.service - Docker Application Container Engine.

~]$ sudo dockerd
INFO[2025-07-17T14:51:01.982219089+08:00] Starting up
INFO[2025-07-17T14:51:01.984550084+08:00] parsed scheme: "unix" module=grpc
INFO[2025-07-17T14:51:01.984597592+08:00] scheme "unix" not registered, fallback to default scheme module=grpc
INFO[2025-07-17T14:51:01.984698589+08:00] ccResolverWrapper: sending update to cc: {[{unix:///run/containerd/containerd.sock <nil> 0 <nil>}] <nil> <nil>} module=grpc
INFO[2025-07-17T14:51:01.984801464+08:00] ClientConn switching balancer to "pick_first" module=grpc
INFO[2025-07-17T14:51:01.986993035+08:00] parsed scheme: "unix" module=grpc
INFO[2025-07-17T14:51:01.987109784+08:00] scheme "unix" not registered, fallback to default scheme module=grpc
INFO[2025-07-17T14:51:01.987243177+08:00] ccResolverWrapper: sending update to cc: {[{unix:///run/containerd/containerd.sock <nil> 0 <nil>}] <nil> <nil>} module=grpc
INFO[2025-07-17T14:51:01.987380310+08:00] ClientConn switching balancer to "pick_first" module=grpc
INFO[2025-07-17T14:51:02.091944870+08:00] [graphdriver] using prior storage driver: overlay2
INFO[2025-07-17T14:51:02.124069707+08:00] Loading containers: start.
WARN[2025-07-17T14:51:02.177626913+08:00] Failed to find iptables: exec: "iptables": executable file not found in $PATH
INFO[2025-07-17T14:51:02.184162676+08:00] Firewalld: docker zone already exists, returning
INFO[2025-07-17T14:51:02.228117134+08:00] stopping event stream following graceful shutdown error="<nil>" module=libcontainerd namespace=moby
failed to start daemon: Error initializing network controller: error obtaining controller instance: failed to create NAT chain DOCKER: COMMAND_FAILED: INVALID_IPV: 'ipv4' is not a valid backend or is unavailable

CAUSE

The docker0 briage network lost and iptables command not found.

~]$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
3: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:50:56:a9:5a:de brd ff:ff:ff:ff:ff:ff
altname enp11s0
altname enx005056a95ade
inet 192.168.3.189/24 brd 192.168.3.255 scope global dynamic noprefixroute ens192
valid_lft 42036sec preferred_lft 42036sec
inet6 fe80::dca4:4d14:c8a4:7880/64 scope link noprefixroute
valid_lft forever preferred_lft forever

~]$ iptables
-bash: iptables: command not found

SOLUTION

  1. Create a briage network docker0
~]$ sudo dnf install bridge-utils
~]$ sudo brctl addbr docker0
~]$ sudo ip addr add 172.17.0.1/16 dev docker0
~]$ sudo ip link set dev docker0 up
  1. Enable the ip forwarding.
~]$ sudo vi /etc/sysctl.conf
~]$ sudo sysctl -p
net.ipv4.ip_forward = 1
  1. Link the iptables command.
~]$ sudo ln -s /usr/sbin/iptables-nft /usr/sbin/iptables
~]$ sudo ln -s /usr/sbin/ip6tables-nft /usr/sbin/ip6tables
  1. Reboot the system.