EFK栈部署时Nginx无法连接Fluentd报connection refused错误
问题根因
报错dial tcp 127.0.0.1:24224: connect: connection refused由两处配置错误共同导致:
- Nginx服务的日志驱动地址配置错误:Docker的fluentd日志驱动由宿主机上的Docker daemon进程发起连接,并非从Nginx容器内部发起请求,配置里写的
localhost:24224指向的是Docker daemon所在宿主机的本地回环地址,根本不是Fluentd服务的监听地址。 - Fluentd监听地址配置错误:
fluent.conf中forward输入源配置了bind localhost,意味着Fluentd仅监听自身容器内部的回环地址,会拒绝所有来自容器外部的24224端口请求。你之前在其他容器内ping fluentd能通,仅能证明服务名解析和三层网络路由正常,不代表24224端口可正常访问。
修复方案
按顺序修改配置即可解决:
- 调整Fluentd监听配置
打开fluent.conf,修改source段的绑定地址为0.0.0.0,允许接收来自网络的请求:
<source> @type forward port 24224 bind 0.0.0.0 </source>
保存配置后重启Fluentd服务生效。
- 调整Nginx服务的日志驱动地址
打开应用栈的docker-compose.yml,修改Nginx服务logging段的fluentd-address为Fluentd服务名,利用已连通的overlay网络做服务发现:
logging: driver: fluentd options: fluentd-address: fluentd:24224 tag: nginx-
- 验证连通性后重启服务
可以先在traefik-public网络内启动一个临时调试容器,执行nc -zv fluentd 24224确认24224端口连通正常,再重新部署Nginx服务,连接拒绝的报错就会消失,Nginx日志会正常推送至Fluentd,再按配置输出到Elasticsearch和Fluentd标准输出。
内容的提问来源于stack exchange,提问作者Rostislav Udaltsov
相关产品推荐
相关产品推荐

