You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派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
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 10:52:43