composer本身不处理dns,需修改系统或容器dns配置;linux/macos虚拟机应编辑/etc/resolv.conf并禁用systemd-resolved,docker容器需启动时指定--dns或配置daemon.json,因dns解析失败会导致卡在loading composer repositories。

Composer 本身不处理 DNS,得改系统或容器的 DNS 配置
Composer 没有 dns 配置项,它完全依赖底层 PHP 和操作系统的 DNS 解析能力。所谓“为 Composer 设置 DNS”,本质是让运行它的环境(Linux/macOS 虚拟机、Docker 容器、WSL)用上更快更稳的 DNS 服务器。卡在 Loading composer repositories 或反复 retry,八成是 packagist.org 解析超时,不是 Composer 慢,是系统查不到 IP。
Linux/macOS 虚拟机:改 /etc/resolv.conf + 禁用 systemd-resolved
虚拟机默认继承宿主机 DNS,但常被劫持或响应慢。硬编码可信 DNS 是最直接有效的办法:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 编辑
/etc/resolv.conf,只保留两行:nameserver 223.5.5.5 nameserver 114.114.114.114
- 如果
systemctl is-active systemd-resolved返回active,必须禁用它:sudo systemctl disable --now systemd-resolved,否则它会偷偷覆盖resolv.conf - 改完后执行
sudo systemd-resolve --flush-caches(或sudo resolvectl flush-caches),再ping packagist.org验证是否能解析出 IP
Docker 容器:启动时指定 DNS 或全局配置 daemon.json
容器默认用 Docker daemon 的 DNS,而 daemon 默认可能用的是宿主机 DNS——同样不可靠。两种方式任选其一:
- 单次运行加参数:
docker run --dns 8.8.8.8 --dns 1.1.1.1 php:8.3-cli composer install - 永久生效:编辑
/etc/docker/daemon.json,加入:{ "dns": ["8.8.8.8", "1.1.1.1"] },然后sudo systemctl restart docker - 注意:不要在
docker-compose.yml的services下写dns字段来覆盖——它只影响容器启动阶段,不影响 Composer 运行时的 DNS 查询行为
为什么光配镜像源还不够?DNS 还是卡在第一步
即使你已执行 composer config -g repos.packagist composer https://mirrors.aliyun.com/composer/,Composer 在发起 HTTP 请求前仍要解析 mirrors.aliyun.com 的 IP。如果这个域名本身解析失败或超时,后续所有优化都白搭。
- 验证方法:
curl -I https://mirrors.aliyun.com/composer/packages.json,如果卡住或报Could not resolve host,就是 DNS 层问题 - 进阶补救:把关键域名写进
/etc/hosts,比如223.6.6.6 mirrors.aliyun.com,彻底绕过 DNS 查询 - IPv6 fallback 是隐藏杀手:
curl -v https://mirrors.aliyun.com 2>&1 | grep "Connected to"若看到 IPv6 地址且卡顿,说明在等 IPv6 超时后再切 IPv4——此时应关掉 IPv6 或强制用 IPv4:curl -4 -I https://...










