Docker健康检查失败:Alpine镜像wget连接localhost:3000被拒绝
Alpine镜像Docker健康检查(wget)连接拒绝问题排查方案
以下是几个针对性的排查和解决方向:
确认应用监听地址
很多应用默认仅绑定127.0.0.1,但容器内的localhost可能优先解析为IPv6的::1,若应用未开启IPv6监听就会触发连接拒绝。可进入容器执行apk add net-tools && netstat -tulpn | grep 3000,查看应用实际监听的IP。若仅监听127.0.0.1,修改应用配置让其监听0.0.0.0,确保兼容IPv4和IPv6访问。强制使用IPv4访问
在wget命令中加入--inet4-only参数,并将URL改为http://127.0.0.1:3000/,强制走IPv4协议避免IPv6解析问题。修改后的健康检查配置如下:healthcheck: test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "--inet4-only", "http://127.0.0.1:3000/"] interval: 30s timeout: 10s retries: 3 start_period: 40s延长启动等待时间
若应用启动需要加载大量资源(如数据库初始化、静态资源编译),40秒的start_period可能不足以让应用完全就绪。尝试将start_period调整为60s或更长,给应用足够的启动缓冲时间。手动验证命令有效性
进入容器直接执行健康检查命令:wget --no-verbose --tries=1 --spider http://localhost:3000/,观察具体报错细节。如果提示wget未安装,执行apk add wget补装工具(部分极简Alpine镜像未预装wget)。
内容的提问来源于stack exchange,提问作者David Kelly
相关产品推荐
相关产品推荐

