树莓派4安装Docker后出现网络不可达问题
此前我的树莓派4的以太网与无线网络均正常工作。我安装了Docker,并通过命令curl https://raw.githubusercontent.com/reportportal/reportportal/master/docker-compose.yml -o docker-compose.yml拉取配置部署ReportPortal镜像,安装成功但部分镜像存在异常,重启设备后无法访问网络。我原本认为docker-compose会使用默认隔离网络,但可能该认知有误或遗漏了某些配置步骤。我并非网络专家,因此陷入困境。
以下是相关命令输出:
traceroute 4.4.4.4
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets connect: Network is unreachable
ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000 link/ether dc:a6:32:04:2a:9c brd ff:ff:ff:ff:ff:ff 3: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000 link/ether dc:a6:32:04:2a:9d brd ff:ff:ff:ff:ff:ff 4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default link/ether 02:42:fb:5c:18:31 brd ff:ff:ff:ff:ff:ff 5: br-97a0c2dc3c6b: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default link/ether 02:42:f6:24:06:50 brd ff:ff:ff:ff:ff:ff 21: veth0d17bc0@if20: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-97a0c2dc3c6b state UP mode DEFAULT group default link/ether e6:a5:76:1f:2a:40 brd ff:ff:ff:ff:ff:ff link-netnsid 10 23: vethf4fa3c3@if22: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-97a0c2dc3c6b state UP mode DEFAULT group default link/ether be:54:91:32:d6:34 brd ff:ff:ff:ff:ff:ff link-netnsid 5 27: veth05f2b7e@if26: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-97a0c2dc3c6b state UP mode DEFAULT group default link/ether f6:80:67:18:6e:96 brd ff:ff:ff:ff:ff:ff link-netnsid 7 845: vethfcc425d@if844: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-97a0c2dc3c6b state UP mode DEFAULT group default link/ether 8a:bc:ad:0e:ed:67 brd ff:ff:ff:ff:ff:ff link-netnsid 0
ifconfig
br-97a0c2dc3c6b: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.18.0.1 netmask 255.255.0.0 broadcast 172.18.255.255 inet6 fe80::42:f6ff:fe24:650 prefixlen 64 scopeid 0x20<link> ether 02:42:f6:24:06:50 txqueuelen 0 (Ethernet) RX packets 56 bytes 7101 (6.9 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 51 bytes 6760 (6.6 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255 ether 02:42:fb:5c:18:31 txqueuelen 0 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet6 fe80::48ed:6e6d:f46e:4dea prefixlen 64 scopeid 0x20<link> ether dc:a6:32:04:2a:9c txqueuelen 1000 (Ethernet) RX packets 428 bytes 38739 (37.8 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 12 bytes 1520 (1.4 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 veth05f2b7e: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet6 fe80::f480:67ff:fe18:6e96 prefixlen 64 scopeid 0x20<link> ether f6:80:67:18:6e:96 txqueuelen 0 (Ethernet) RX packets 10 bytes 700 (700.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 48 bytes 5670 (5.5 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 veth0d17bc0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet6 fe80::7c1e:a1e4:8760:b726 prefixlen 64 scopeid 0x20<link> inet6 fe80::e4a5:76ff:fe1f:2a40 prefixlen 64 scopeid 0x20<link> ether e6:a5:76:1f:2a:40 txqueuelen 0 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 86 bytes 12948 (12.6 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 vethf4fa3c3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet6 fe80::6273:fa3f:d659:8bc1 prefixlen 64 scopeid 0x20<link> inet6 fe80::bc54:91ff:fe32:d634 prefixlen 64 scopeid 0x20<link> ether be:54:91:32:d6:34 txqueuelen 0 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 73 bytes 11189 (10.9 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
从你的输出能看到核心问题:eth0没有获取到IPv4地址,这是导致网络不通的关键。Docker的自定义网桥br-97a0c2dc3c6b虽然正常,但它不会影响主机的物理网卡IP分配,大概率是重启后DHCP客户端没正常工作,或者Docker的网络规则干扰了DHCP请求。
试试下面这些步骤,一步步排查:
第一步:手动给eth0分配临时IP恢复网络
先让主机能上网,方便后续操作。假设你的路由器网段是192.168.1.0/24(如果不是,换成你实际的网段),执行:sudo ip addr add 192.168.1.100/24 dev eth0 sudo ip route add default via 192.168.1.1 dev eth0 echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf执行完后试试
ping 8.8.8.8,如果能通,说明物理链路没问题,只是IP分配的问题。第二步:检查DHCP服务状态
树莓派默认用dhcpcd管理IP,看看它有没有正常运行:sudo systemctl status dhcpcd如果显示
inactive或者failed,重启它:sudo systemctl restart dhcpcd然后再用
ip addr show eth0看看有没有获取到IPv4地址。第三步:清理Docker可能的网络干扰
有时候Docker的iptables规则会意外阻断主机的DHCP请求,先停止所有容器,再重启Docker服务:docker-compose down sudo systemctl restart docker重启后再检查
dhcpcd状态,看看eth0能不能正常获取IP。如果还是不行,试试重置Docker的iptables规则:sudo iptables -F sudo iptables -t nat -F sudo systemctl restart docker注意:重置iptables会清空所有自定义规则,不过对于解决当前问题来说是安全的,Docker重启后会重新生成必要的规则。
第四步:检查wlan0的状态
你的wlan0显示state DOWN,如果需要用无线的话,可以手动启动它:sudo ip link set wlan0 up sudo wpa_cli reconfigure之后看看能不能获取到IP,这样也能作为网络的备用方案。
第五步:排查ReportPortal的docker-compose配置
你提到部分镜像异常,可能是配置里的网络设置有问题。打开docker-compose.yml看看有没有自定义的网络配置,比如指定了和主机网段冲突的子网,或者强制修改了主机的网络规则。如果发现可疑的配置,可以暂时注释掉,重新部署试试。
如果上面的步骤都试过还是不行,你可以把dhcpcd的日志贴出来(sudo journalctl -u dhcpcd),这样能更精准地定位问题。
内容的提问来源于stack exchange,提问作者SystemsInCode

