关键是要清理旧缓存并重建元数据:yum执行clean all && makecache,npm用cache clean --force并确认registry,pip运行cache purge后升级pip,docker构建加--no-cache,php需重置opcache或重启php-fpm。

不需要改代码,也能让系统“重新认一遍”镜像源——关键不是替换文件本身,而是让包管理器彻底丢弃旧缓存、按新配置重新加载元数据。
清理并重建本地缓存
镜像源切换后,yum、npm、pip 等工具仍会优先使用本地缓存的索引和包列表。不清理,它们根本不会去新地址拉取最新信息。
-
yum(CentOS/RHEL):运行
yum clean all && yum makecache,清空所有缓存并根据当前 repo 配置生成全新元数据 -
npm:执行
npm cache clean --force && npm config get registry确认源已生效,必要时加npm install --no-cache强制跳过安装缓存 -
pip:用
pip cache purge(pip ≥20.1)或手动删缓存目录(~/.cache/pip),再运行pip install -U pip触发源验证
绕过本地缓存强制重载配置
有些工具(如 Docker build 或某些 PHP 扩展)会把源配置或依赖清单缓存在内存或进程级上下文中,重启服务才能生效。
- Docker 构建时加
--no-cache参数,确保每层都重新从网络拉取,不受历史构建缓存干扰 - PHP 使用 OPcache 时,即使源码没变,也要调用
opcache_reset()或设opcache.validate_timestamps=1并重启 php-fpm - Nginx/Apache 若缓存了反向代理后的镜像源响应(如镜像站前端),需执行
nginx -s reload或清空 proxy_cache
验证是否真正更新成功
不能只看命令没报错,要确认实际行为已切换到新源:
- 查日志:运行
yum update --assumeno或npm info lodash dist.tarball,观察下载 URL 是否指向阿里云、清华或 npmmirror.com - 抓包验证:用
tcpdump -i any port 443 -w mirror.pcap抓几秒流量,用 Wireshark 查目标域名 - 对比速度:新源首次同步可能稍慢,但后续
yum search或npm outdated响应应明显加快
注意配置文件优先级陷阱
有时候你改了全局配置,却没生效——因为更局部的配置覆盖了它。
- npm 会按顺序读取:
/etc/npmrc→~/.npmrc→./.npmrc,后者优先级最高;检查项目根目录是否存在.npmrc并确认其中 registry 地址 - yum 的 repo 文件若存在多个启用项(如
CentOS-Base.repo和epel.repo),需确保所有相关 repo 都指向同一镜像站,否则部分包仍走默认源 - Docker 的
daemon.json中若配置了registry-mirrors,会影响所有 pull 操作,与 Dockerfile 无关但属于同一体系











