Linux Mint 20.1/Ubuntu 20.04下安装/卸载Docker后网络连接故障排查求助
从你提供的systemd-resolve --status和ifconfig输出来看,你的网卡enp4s0虽然已经处于UP状态,但没有获取到IP地址,也没有分配DNS和路由配置,这是导致网络连接失败的核心原因。下面是几个针对性的调试和修复方法,你可以一步步尝试:
1. 重置NetworkManager的缓存配置
Docker安装时可能悄悄修改了NetworkManager的相关设置,即使卸载也可能残留异常配置,先重置它:
- 停止NetworkManager服务:
sudo systemctl stop NetworkManager - 删除NetworkManager的缓存文件:
sudo rm -rf /var/lib/NetworkManager/* - 重新启动NetworkManager:
sudo systemctl start NetworkManager
做完这几步后,回到系统的网络设置界面,尝试重新连接你的网络,看看是否能正常获取IP。
2. 手动触发DHCP获取IP
你的网卡没拿到IP,大概率是DHCP客户端工作异常,手动调用dhclient试试:
- 执行命令手动获取IP:
sudo dhclient enp4s0 - 执行完后用
ip addr show enp4s0查看是否出现inet开头的IP地址。 - 如果还是不行,检查DHCP客户端服务状态:
systemctl status isc-dhcp-client
如果服务没运行,启动并设置开机自启:
sudo systemctl start isc-dhcp-client sudo systemctl enable isc-dhcp-client
3. 修复systemd-resolved的DNS配置
从你的resolved状态输出看,全局和网卡的DNS配置都异常,重置一下:
- 停止systemd-resolved服务:
sudo systemctl stop systemd-resolved - 重建resolv.conf的软链接:
sudo rm /etc/resolv.conf sudo ln -s /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf - 重启服务:
sudo systemctl start systemd-resolved
之后再运行systemd-resolve --status,检查Link 2 (enp4s0)部分是否有Current Scopes: DNS的字样,以及是否显示了DNS服务器地址。
4. 清理Docker残留的iptables和路由规则
即使卸载了Docker,它创建的iptables链、路由规则可能还留在系统里,影响网络:
- 查看当前iptables规则,如果你看到大量以
DOCKER开头的链,就清空iptables:sudo iptables -F sudo iptables -X sudo iptables -t nat -F sudo iptables -t nat -X sudo iptables -t mangle -F sudo iptables -t mangle -X sudo iptables -P INPUT ACCEPT sudo iptables -P FORWARD ACCEPT sudo iptables -P OUTPUT ACCEPT - 保存清理后的规则:
sudo netfilter-persistent save - 查看路由表,检查是否有异常的Docker相关路由(比如172.17.x.x、192.168.x.x这类非你的局域网段):
ip route show
如果有,用下面的命令删除(替换成你看到的异常路由前缀):
sudo ip route del 172.17.0.0/16
5. 重置网卡硬件状态
如果上面的配置层面都没问题,试试重置网卡:
- 先禁用再启用网卡:
sudo ip link set enp4s0 down sudo ip link set enp4s0 up - 查看网卡驱动是否正常加载:
lspci -k | grep -A 3 Ethernet
如果输出里显示Kernel driver in use:后面有驱动名称,说明驱动正常;如果没有,尝试重新加载驱动(替换成你的驱动名,比如r8169):
sudo modprobe -r r8169 sudo modprobe r8169
6. 临时设置静态IP测试
如果DHCP一直无法获取IP,可以手动设置静态IP来测试网络是否能正常工作:
- 假设你的局域网网关是
192.168.1.1,子网掩码是255.255.255.0,你可以给自己设置一个未被占用的IP,比如192.168.1.100:sudo ip addr add 192.168.1.100/24 dev enp4s0 sudo ip route add default via 192.168.1.1 dev enp4s0 echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf - 之后测试连通性:
ping 192.168.1.1 # ping网关 ping 8.8.8.8 # ping外网DNS
如果这两个都能ping通,说明是DHCP或者NetworkManager的配置问题;如果还是不行,可能需要检查网卡硬件或者系统内核的问题。
你可以按照上面的顺序一步步尝试,每完成一步就测试网络连接,应该能定位并解决问题。
内容的提问来源于stack exchange,提问作者user3340499

