服务启动时报无法绑定地址,检查发现配置文件里写的是双栈监听,但机器的 IPv6 其实被禁用了。

把日志和配置对完,能解释这个现象的基本就这几处。内核参数禁用了 IPv6,绑定双栈地址直接失败。还有一种是网卡没有分配到 IPv6 地址。

还有一种情况,应用把监听地址写死成了某个具体地址。

先确认系统是否启用 IPv6

cat /proc/sys/net/ipv6/conf/all/disable_ipv6

随后看网卡是否拿到地址

ip -6 addr show

接着改成只监听 IPv4 地址

grep -n listen /etc/nginx/nginx.conf

等前面都确认过,再确认监听结果

ss -lntp | grep 80

这次没动代码,只在配置和运行环境上找原因。

隔了一天再看,现象没变,说明不是偶发。

别只看报错消失,验证要多做一步。服务正常启动,监听列表里出现预期地址,访问测试通过。

容易忽略的是,容器网络默认可能不带 IPv6,镜像里写死双栈监听很容易在新环境起不来;监听地址尽量走配置项,别在代码里写死具体地址。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。

作者 9823189