尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Ubuntu apt update报错Could not resolve?一篇搞定DNS排查与换源全流程
1. 从报错到定位这个报错背后发生了什么先说结论Could not resolve mirrors.aliyun.com的本质是 DNS 解析失败。它不是你敲错了地址也不是阿里源挂了而是你的系统问 DNS 服务器mirrors.aliyun.com 对应的 IP 是什么时没有得到一个有效的回答。很多人在这一步就慌了以为是源的问题跑去换清华源、中科大源结果发现报错依然存在只是域名从 mirrors.aliyun.com 换成了 mirrors.tuna.tsinghua.edu.cn。这说明思路从一开始就偏了——问题不在哪个源而在你能不能解析到源服务器的地址。这个报错的完整链路是这样的当你执行apt update时APT 会去读/etc/apt/sources.list里的源地址然后系统需要把这个域名解析成 IP 才能发起 HTTP 请求。如果解析失败APT 就会抛出Could not resolve的错误命令直接终止。整个过程里真正出问题的环节是 DNS 查询而不是 APT 本身。从这几个月的社区反馈来看这个报错在 Ubuntu 用户中出现的频率相当高尤其是刚装完系统的新手。原因也很有代表性Ubuntu 默认使用 systemd-resolved 管理 DNS而这个服务在某些场景下比如手动改过网络配置、虚拟机里装系统、或者网络环境切换过会产生异常导致解析功能失效。这篇文章我就按实际的排查顺序来写从现象出发逐步定位到根因再给出修复方案。最后补上我在多次踩坑后总结的换源完整流程和一些平时文档里不会写的细节。2. 环境确认与故障复现先别急着改配置2.1 确认系统版本和当前源配置排查任何一个问题第一步都是先搞清楚我在哪。Ubuntu 不同版本的源配置路径和默认网络管理方式有差异盲目执行网上的命令很容易越改越乱。先看系统版本lsb_release -a正常情况下会输出类似下面的信息Distributor ID: Ubuntu Description: Ubuntu 24.04.2 LTS Release: 24.04 Codename: noble注意Codename这一行它决定了你换源时要写的内容。不同版本的代号完全不同24.04 是 noble22.04 是 jammy20.04 是 focal。如果你在网上抄了一个源配置但粘贴进去的内容和你系统版本不匹配虽然报错不是 Could not resolve但同样会让你折腾半天。看完版本后看当前的源文件cat /etc/apt/sources.list如果你的系统是 24.04 之后的版本执行cat /etc/apt/sources.list可能会发现文件是空的或者提示没有这个文件。这是因为新版 Ubuntu 把软件源配置迁移到了/etc/apt/sources.list.d/ubuntu.sources格式也从原来的单行 deb 地址变成了 DEB822 格式。这个变化让很多从旧版本升级上来的用户懵了因为他们对着旧教程找sources.list找半天找不到然后开始瞎折腾。2.2 复现错误并记录完整报错信息确认了环境之后先执行一次apt update复现问题然后把完整报错信息记录下来sudo apt update一个典型的报错输出长这样Err:1 http://mirrors.aliyun.com/ubuntu noble InRelease Could not resolve mirrors.aliyun.com Reading package lists... Done Building dependency tree... Done Reading state information... Done All packages are listed in the package list.注意看了这个报错里有几个关键字Err表示错误Could not resolve表示解析失败后面跟的是具体的域名。如果报错前面还有一个 IP 地址比如Could not resolve mirrors.aliyun.com (8.8.8.8)那说明系统明确去问了 8.8.8.8 这台 DNS 服务器但没有得到答复。完整信息的价值在于它能告诉你系统当前使用的 DNS 服务器是哪台这直接决定了下一步的排查方向。3. 逐步排查链路从网络连通性到 DNS 解析全过程这一部分是整篇文章的核心。我不是直接给答案而是按真实踩坑时的排查顺序来写。你跟着走一遍以后遇到类似问题都能自己解决。3.1 第一步Ping 测试判断网络基础连通性先看最基础的网络通不通ping -c 4 223.5.5.5这里没有用域名而是直接 ping IP是为了跳过 DNS 解析环节纯测网络链路。如果 ping 不通可能是网卡配置、路由或物理连接的问题如果 ping 得通说明网络是通的问题就在 DNS 解析环节。接下来 ping 外网域名ping -c 4 www.baidu.com如果域名 ping 不通但 IP ping 得通基本可以断定 DNS 解析有问题。如果两者都通情况就比较奇怪了需要进一步测试。我遇到的大多数情况都是IP 通、域名不通这基本上就把问题锁定在 DNS 上了。3.2 第二步解析测试确认 DNS 是否生效确认网络通之后用dig或nslookup做一次显式解析nslookup mirrors.aliyun.com如果系统没装nslookup用下面这个命令安装sudo apt install dnsutils不过这里有个尴尬的地方如果你连 apt 都用不了安装 dnsutils 也会报错。这时候用getent或者 Python 来查也行。优先推荐getent因为它不需要额外装东西getent hosts mirrors.aliyun.com如果返回了 IP 地址说明系统层面可以解析问题可能出在 APT 的配置上如果没有返回说明系统层面就解析不了。3.3 第三步检查 DNS 配置文件明确了 DNS 解析有问题之后查看当前系统配置的 DNS 服务器cat /etc/resolv.conf这里有个非常典型的坑在 Ubuntu 22.04 及之后的版本中/etc/resolv.conf是一个软链接指向/run/systemd/resolve/stub-resolv.conf里面写的 DNS 是127.0.0.53这个本地回环地址。这不是错误而是 systemd-resolved 的 stub 模式——系统把 DNS 查询都转发给本地 systemd-resolved 服务再由它转发给上游真实 DNS。如果你在这个文件里看到的是127.0.0.53说明 systemd-resolved 在接管 DNS如果你看到的是一串真实 IP说明系统直接使用该 IP 解析。两种情况对应着不同的修复思路。3.4 第四步测试 systemd-resolved 的解析状态既然/etc/resolv.conf指向的是 systemd-resolved那要看的就不仅是配置还要看这个服务本身的状态systemd-resolve --status在新版系统上命令变成了resolvectl status这个命令输出很长重点看DNS Servers和Current DNS Server两行。如果这里显示的是空值或者指向了一个失效的 DNS 服务器就能解释为什么解析失败了。再做一个针对性测试resolvectl query mirrors.aliyun.com如果返回resolve call failed说明 systemd-resolved 这个服务本身有问题。最常见的两种原因一是上游 DNS 配置成了不可达的地址比如之前设的某个内网 DNS换了个网络环境后就失效了二是服务内部状态异常需要重启。3.5 第五步检查网络管理器的覆盖配置Ubuntu 桌面版使用 NetworkManager 管理网络服务器版使用 netplan。这两个工具都有可能覆盖 systemd-resolved 的配置所以光改/etc/resolv.conf是治标不治本的——下次重启或者重新连接网络配置会被恢复。Netplan 的配置文件在/etc/netplan/目录下查看当前配置ls /etc/netplan/ cat /etc/netplan/*.yaml看到类似下面的内容network: version: 2 ethernets: ens33: dhcp4: true这个配置表示网卡通过 DHCP 获取 IP 和 DNS。如果 DHCP 服务器没有下发有效的 DNS或者下发的 DNS 本身有问题就会出现解析失败。4. 修复方案详解三种经过验证的有效路径4.1 方案一直接指定可信的公共 DNS如果确定是 DNS 配置问题最快的修复方式是把系统 DNS 指向一个公共 DNS。这里我推荐 223.5.5.5阿里 DNS和 119.29.29.29腾讯 DNS前者和阿里源配套使用延迟最低后者在国内的稳定性也不错。对于使用 netplan 的服务器版修改配置文件network: version: 2 ethernets: ens33: dhcp4: true nameservers: addresses: - 223.5.5.5 - 119.29.29.29注意缩进必须严格对齐YAML 对缩进非常敏感。改完应用配置sudo netplan apply应用之后再用getent hosts mirrors.aliyun.com验证一次如果返回 IP 地址说明修复成功。4.2 方案二重置 systemd-resolved 服务如果修改配置后依然解析失败大概率是 systemd-resolved 服务本身状态异常。这个服务的状态异常有时候很隐蔽——配置文件看起来没问题但服务内部的状态已经乱了。重启服务sudo systemctl restart systemd-resolved重启后确认服务状态systemctl status systemd-resolved输出里应该有active (running)字样。如果服务处于 failed 状态查看详细日志journalctl -u systemd-resolved --no-pager -n 50日志末尾会告诉你服务为什么起不来。常见原因包括端口被占用、配置文件语法错误等。4.3 方案三临时绕过 systemd-resolved不推荐但应急有效在某些极端情况下systemd-resolved 怎么修都修不好但你又急着要装软件。这时候有一个临时的应急方案直接把/etc/resolv.conf指向真实 DNS。先备份原始文件sudo mv /etc/resolv.conf /etc/resolv.conf.bak然后新建一个使用真实 DNS 的文件sudo bash -c echo nameserver 223.5.5.5 /etc/resolv.conf这个方案能让系统立刻恢复解析功能但有一个副作用因为/etc/resolv.conf不再是软链接而是变成了一个普通文件NetworkManager 或 systemd-resolved 后续不会再管理它。这意味着你手动指定的 DNS 会一直生效即使网络环境变了也不会自动更新。所以我只建议把它当作应急手段问题修好之后还是要把 systemd-resolved 恢复正常然后把软链接恢复回去sudo rm /etc/resolv.conf sudo ln -s /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf4.4 排查中的其他常见干扰因素上面三个方案覆盖了绝大多数情况但如果你依然解决不了再检查下面几个点。IPv6 问题某些网络环境下 IPv6 DNS 不可达但系统优先尝试 IPv6 解析导致超时。可以用下面的命令查看系统是否优先使用 IPv6cat /proc/sys/net/ipv6/conf/all/disable_ipv6如果输出为 0说明 IPv6 是开启状态但这本身不一定是问题。更有效的排查方式是看解析超时的时间——如果每次报错都要等很久才出结果IPv6 超时的嫌疑就很大。代理设置如果你之前配置过代理APT 会尝试通过代理访问源站。代理服务器的 DNS 解析有可能会失败。检查代理环境变量env | grep -i proxy如果有输出说明有代理环境变量在生效。检查 APT 的代理配置cat /etc/apt/apt.conf.d/*proxy*防火墙或安全组某些云服务器或公司网络会限制对特定 IP 段的访问。虽然阿里源没有听说过被大规模封锁的情况但你的网络环境确实可能出现特殊限制。可以用curl直接测试是否能连通阿里源 IPcurl -I http://mirrors.aliyun.com如果 curl 能通而 apt 不通问题大概率在 APT 的配置上而不是网络。5. 修复之后的完整换源操作从备份到验证DNS 问题解决之后才真正进入换源的正式环节。这里我按完整的操作流程走一遍每一步都带上为什么这样做。5.1 备份原始源文件改任何系统配置文件之前第一件事永远是备份。这不是形式主义而是出了问题能让你三秒钟恢复到原始状态sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup.$(date %Y%m%d)对于 24.04 及之后的版本sudo cp /etc/apt/sources.list.d/ubuntu.sources /etc/apt/sources.list.d/ubuntu.sources.backup.$(date %Y%m%d)把日期加到备份文件名里是个我自己用了很多年的习惯。改配置最怕的就是改坏了之后想回滚结果发现备份文件被覆盖了。加个日期虽然只是一个小动作但能让你在需要回滚时快速找到正确时间点的版本。5.2 选择阿里源并写入配置我身边不少人觉得选源很纠结阿里、清华、中科大、华为各有支持者。但从实际体验来看国内这些大厂的开源镜像站在核心软件包同步上基本没有明显差距最大的区别反而可能在于你当前网络环境到各个机房的物理延迟。如果你是北方电信的网络使用阿里源通常延迟低一些如果是教育网环境清华源可能有更好的路由。这里直接用阿里源为例。对于 22.04 及之前的版本编辑/etc/apt/sources.listsudo vim /etc/apt/sources.list把文件内容全部替换为deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse注意这里的jammy是 22.04 的代号。如果你是 24.04把jammy换成noble如果是 20.04换成focal。如果你不确定自己的代号回到文章开头执行lsb_release -a查看 Codename 就行。5.3 新版系统的 DEB822 格式处理如果你用的是 24.04 或更新的版本情况会不一样。新版系统的源配置在/etc/apt/sources.list.d/ubuntu.sources格式是 DEB822Types: deb URIs: http://mirrors.aliyun.com/ubuntu/ Suites: noble noble-updates noble-backports Components: main restricted universe multiverse Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg要把这个文件指向阿里源直接改 URIs 那一行就行其他内容保持原样。Suites 里的noble对应 24.04如果你是其他版本替换成对应代号。这里建议大家优先使用 sed 命令做精准替换而不是手动删改整个文件——直接编辑整个文件容易误删 Signed-By 行导致后续 apt update 报公钥错误sudo sed -i s|http://archive.ubuntu.com/ubuntu/|http://mirrors.aliyun.com/ubuntu/|g /etc/apt/sources.list.d/ubuntu.sources5.4 更新软件源缓存配置写完之后执行更新sudo apt update这次如果看到类似下面的输出就说明换源成功了Hit:1 http://mirrors.aliyun.com/ubuntu noble InRelease Hit:2 http://mirrors.aliyun.com/ubuntu noble-updates InRelease Hit:3 http://mirrors.aliyun.com/ubuntu noble-backports InRelease Reading package lists... Done Building dependency tree... Done Reading state information... DoneHit表示连接成功且元数据没有变化。看到全是Hit基本不用担心这是正常现象。如果出现Get说明下载了新的元数据也不用担心。真正需要关注的是Err和Ign开头的行遇到Err要仔细看报错信息。5.5 升级软件包可选如果你不仅想换源还想顺便把系统软件包升级到最新版本sudo apt upgrade这一步会把所有已安装的软件包升级到软件源中的最新版本。第一次执行可能需要下载大量数据耗时比较长建议在稳定的网络环境下执行。6. 安全校验与日常使用中的经验细节6.1 GPG 密钥验证机制很多刚接触 Ubuntu 的人不理解为什么换源后apt update会报公钥错误。这里补充一下背景APT 每次获取软件包元数据时,都会验证这些数据是否由 Ubuntu 官方密钥签名。当你换源之后,APT 还会在元数据中找到由阿里源签名的 Release 文件以及对应的 InRelease 文件,里面包含了 Ubuntu 官方公钥的签名。在新版本 Ubuntu 中源配置默认通过Signed-By指定密钥文件路径路径指向/usr/share/keyrings/ubuntu-archive-keyring.gpg。这个机制保证了即使你换成了阿里源或清华源APT 依然会验证软件包的官方签名从而防止源被篡改后下发恶意软件。这一点也是为什么推荐大家使用官方镜像站而不是网上随便找的源地址——因为这些镜像站不会改动上游的签名信息。如果你在apt update时遇到公钥报错,比如The following signatures couldnt be verified because the public key is not available,先检查你的输出内容是不是把Signed-By行删了或者指向了不存在的文件。绝大多数公钥报错都是源配置不完整导致的。6.2 阿里源与清华源的选择逻辑这个问题没有标准答案我在实际使用中的体会是核心目的只是让 apt 能正常下载软件清华源和阿里源在软件包同步速度上差距很小真正有影响的是你当前网络到镜像站的延迟和带宽。具体可以做一个简单测试来判断time curl -s -o /dev/null http://mirrors.aliyun.com/ubuntu/dists/noble/InRelease time curl -s -o /dev/null http://mirrors.tuna.tsinghua.edu.cn/ubuntu/dists/noble/InRelease哪个耗时短就选哪个源。这个测试结果会受网络环境波动影响但大体上能反映你当前网络到两个源站的连接质量。6.3 换源后常见问题的排查思路换源成功不等于一劳永逸。后续你可能会遇到下面几个高频问题简单列一下排查思路。换源后 apt update 依然报错先确认 sources.list 里的代号是否和系统版本一致,再用curl -I 源地址测试源站连通性。两个都正常的情况下,基本能把问题锁定在 DNS 或者网络管理服务。下载速度没有明显提升有些时候,换源之后速度还是很慢,甚至比默认源还慢。这可能是因为阿里源在高峰期带宽紧张,也可能是因为你的网络运营商和源站之间的互联链路不够好。可以换个源再试一次,别在一个源上死磕。系统升级后源配置被还原Ubuntu 大版本升级时(do-release-upgrade),系统可能会自动重置源配置。升级后检查一下/etc/apt/sources.list或/etc/apt/sources.list.d/ubuntu.sources,确认配置是否还是你之前设置的镜像源。6.4 systemd-resolved 与 Docker 的 DNS 冲突如果你在 Ubuntu 上装 Docker可能会遇到一个和本文相关的经典问题容器内无法解析域名。原因是 Docker 默认把 DNS 设置为127.0.0.53即宿主机的 systemd-resolved但 systemd-resolved 的 stub 模式在某些条件下无法正确处理来自 Docker 容器网络的 DNS 查询。解决方式是修改 Docker 的 daemon.json把 DNS 指向真实可用的公共 DNSsudo vim /etc/docker/daemon.json写入{ dns: [223.5.5.5, 119.29.29.29] }重启 Dockersudo systemctl restart docker这个问题和换源遇到的问题同源——都是 DNS 解析链路在某个环节断了。理解了 systemd-resolved 的工作原理这类问题基本都能找到一个清晰的排查路径。7. 写在最后的几点实际体会这次踩坑让我最深的感触是排查问题的关键不是背命令而是理解系统各组件之间的关系。你看到Could not resolve报错时脑子里应该有一个清晰的链条apt 请求域名 → 系统查 /etc/resolv.conf → 请求转发到 systemd-resolved → systemd-resolved 向上游 DNS 查询 → 返回 IP → 建立连接。每一步对应着不同的配置文件和排查方式。当你把这条链路理解清楚了不管报错的是阿里源还是清华源不管是 Could not resolve 还是 Temporary failure in name resolution你都有一套稳定的排查方法而不是四处搜教程碰运气。另外一个小建议如果条件允许尽量让 DNS 配置保持自动获取不要手动固定。手动固定 DNS 在一时能解决问题但换了个网络环境后忘记改回来反而会造成新的问题。systemd-resolved 不是洪水猛兽它在绝大多数场景下工作得很好出了问题优先修复它而不是绕过它。最后再提醒一句本文给出的所有命令都建议在理解了作用之后再执行尤其是涉及删除和覆盖文件的命令。命令行操作没有撤回功能谨慎永远是对的。
RELATED

相关推荐

大语言模型学习路线:从零基础到AI工程师

大语言模型学习路线:从零基础到AI工程师

1. 为什么现在是大语言模型学习的最佳时机?2023年被称为"大语言模型元年",各种参数规模超过百亿的模型如雨后春笋般涌现。但不同于早期需要专业实验室才能接触的AI技术,如今个人开发者只需一台普通电脑就能运行微调后的开源模型。这…

📅 2026/9/18 22:36:36
JavaScript中this的绑定规则与Maui框架解决方案

JavaScript中this的绑定规则与Maui框架解决方案

1. 项目概述:驯服JavaScript中的this难题在JavaScript开发中,this关键字的行为常常让开发者感到困惑。不同于传统面向对象语言中this指向的确定性,JavaScript中的this更像是一个"会变形的怪物"——它的指向取决于调用方式、执行环境…

📅 2026/9/18 22:36:36
OneUptime 工作流运行与日志(Runs  Logs)深度指南:状态机、步骤追踪与故障排查实战

OneUptime 工作流运行与日志(Runs Logs)深度指南:状态机、步骤追踪与故障排查实战

OneUptime 工作流运行与日志(Runs & Logs)深度指南:状态机、步骤追踪与故障排查实战 【免费下载链接】oneuptime Complete open-source monitoring and observability platform. 项目地址: https://gitcode.com/GitHub_Trending/on/one…

📅 2026/9/18 22:36:36
MORE NEWS

更多资讯

📰

postgres_lsp 安全规则 renamingTable 详解:拦截表重命名风险,守护迁移与线上查询

postgres_lsp 安全规则 renamingTable 详解:拦截表重命名风险,守护迁移与线上查询 【免费下载链接】postgres_lsp A Language Server for Postgres 项目地址: https://gitcode.com/GitHub_Trending/po/postgres_lsp 本指南以 postgres_lsp 项目中…

📰

PyCharm虚拟环境完全指南:从创建到日常开发

先看个真实案例。上周有位读者找我,说他电脑里Python版本是3.9,装了一堆包,后来为了跑一个新项目,装了个要求Python 3.11的库,结果系统被搞得一团糟——原来能跑的脚本报错,pip list乱成一锅粥,…

📰

CMake构建实战:从命令行到缓存机制的核心技巧解析

简介:CMake 开发手册详解 PDF 围绕跨平台构建系统 CMake 展开,面向 C/C 开发者与需要管理多语言、多配置项目的工程人员,从 2.8.3 版本的关键选项到常用命令均有覆盖,可帮助读者快速掌握编写 CMakeLists.txt、借助 Makefile 或 Vi…

📰

Slang 生成式设计文档的审查实践:03-semantic-check 审查报告的机制、发现与源码佐证

Slang 生成式设计文档的审查实践:03-semantic-check 审查报告的机制、发现与源码佐证 【免费下载链接】slang Making it easier to work with shaders 项目地址: https://gitcode.com/GitHub_Trending/sl/slang 本文以 Slang 仓库中的一份真实文档审查报告&a…

📰

Canary vs Canary-Qwen:transcribe.cpp 两大 NVIDIA 模型家族完整横向对比指南

Canary vs Canary-Qwen:transcribe.cpp 两大 NVIDIA 模型家族完整横向对比指南 【免费下载链接】transcribe.cpp ggml speech-to-text inference for 16 model families 项目地址: https://gitcode.com/GitHub_Trending/tr/transcribe.cpp transcribe.cpp 是…

📰

维莫德吉治疗基底细胞癌:缩瘤速度、耐药机制与用药管理全解析

1. 药物原理与临床定位:维莫德吉拿什么对付基底细胞癌1.1 基底细胞癌并不全是“小问题”基底细胞癌是皮肤科和肿瘤科绕不开的最常见皮肤恶性肿瘤,占所有皮肤癌的绝大部分。绝大多数情况下,它的确很温和:长在面部、鼻翼、眼周&…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬