服务启动时报无法绑定地址,检查发现配置文件里写的是双栈监听,但机器的 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,镜像里写死双栈监听很容易在新环境起不来;监听地址尽量走配置项,别在代码里写死具体地址。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。