改dns比换镜像源更快生效,因卡在“loading composer repositories”八成是dns解析被劫持或超时,而非源站慢;dns是请求链路最前端,直接干预可绕过中间转发、ipv6 fallback及污染,见效更直接。

为什么改DNS比换镜像源还快生效
Composer 卡在 Loading composer repositories 或 Downloading https://mirrors.aliyun.com/...,八成不是源站慢,而是 DNS 解析卡住了。系统默认用宿主机 DNS,但很多公司网络、校园网或虚拟机 NAT 模式下,DNS 请求会被劫持、超时或返回错误 IP。改 DNS 是链路最前端的干预,跳过所有中间转发,见效比配镜像还直接。
实操建议:
- 立刻执行
sudo echo "nameserver 114.114.114.114" > /etc/resolv.conf(Linux)或在 VirtualBox/Parallels 网络设置里手动指定 DNS;macOS 可在「网络偏好设置→高级→DNS」里加 223.5.5.5 和 114.114.114.114 - 禁用 systemd-resolved(Ubuntu/Debian 常见):
sudo systemctl stop systemd-resolved && sudo systemctl disable systemd-resolved,否则它会劫持/etc/resolv.conf - Docker 容器内必须显式传 DNS:
docker run --dns 114.114.114.114 --dns 223.5.5.5 ...,光改宿主机没用
hosts 预绑定关键域名能绕过哪些坑
有些网络环境连 ping packagist.org 都返回 unknown host,说明 DNS 已被完全污染或屏蔽。这时候靠换 DNS 不够,得硬编码 IP——尤其对 mirrors.aliyun.com、packagist.org、github.com 这三个 Composer 必经域名。
实操建议:
- 查真实 IP(别信本地
nslookup):用境外服务器或dig @8.8.8.8 mirrors.aliyun.com +short获取权威解析结果 - 追加到
/etc/hosts(Linux/macOS)或C:\Windows\System32\drivers\etc\hosts(Windows):114.114.114.114 mirrors.aliyun.com、137.74.169.73 packagist.org、140.82.114.4 github.com - 改完立即清缓存:
sudo dscacheutil -flushcache(macOS)或sudo systemd-resolve --flush-caches(部分 Linux),否则可能读旧缓存
IPv6 fallback 导致“卡住但不报错”怎么验证和关掉
Composer 默认先尝试 IPv6 地址,超时(通常 1–3 秒)再 fallback 到 IPv4。一个包卡 3 秒,100 个包就是 5 分钟无响应——而日志里只显示 Downloading ...,没有错误。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
实操建议:
- 用
curl -v https://packagist.org 2>&1 | grep "Connected to"查看是否连到了 IPv6 地址(如2a03:2880:...)且后续卡住 - 临时禁用 IPv6 解析:
curl --ipv4 -v https://packagist.org测试是否立刻响应;若 OK,说明是 IPv6 问题 - 全局关掉(Linux/macOS):
echo 'precedence ::ffff:0:0/96 100' | sudo tee -a /etc/gai.conf,让 IPv4 优先级高于 IPv6
Docker 和虚拟机里 DNS 配置容易漏哪几处
很多人只改了宿主机 DNS,却忘了容器或虚拟机内部是独立网络栈。Docker 默认继承宿主机 /etc/resolv.conf,但某些版本或网络模式下会被覆盖;VirtualBox 的 NAT 模式则完全走自己的 DNS 转发链。
实操建议:
- Docker 启动时必须加
--dns参数,或者在/etc/docker/daemon.json里写死:{"dns": ["114.114.114.114", "223.5.5.5"]},然后sudo systemctl restart docker - VirtualBox:选中虚拟机 → 设置 → 网络 → 高级 → 端口转发 → DNS 服务器填
114.114.114.114;桥接模式则需在虚拟机内单独配/etc/resolv.conf - CI/CD(如 GitHub Actions)里,
run步骤前加echo "nameserver 114.114.114.114" | sudo tee /etc/resolv.conf,别依赖默认配置
真正卡住的时候,往往不是 Composer 慢,而是 DNS 在后台默默重试 IPv6、等超时、再 fallback。改 DNS + hosts + 关 IPv6 fallback 这三步做完,90% 的“下载慢”会直接消失——比调 process-timeout 或清缓存管用得多。










