连接localhost提示read connection refuse的问题

先说结论:
/etc/hosts文件下缺失127.0.0.1与localhost的映射关系,添加以下两行即可:

127.0.0.1       localhost localhost.localdomain localhost4 localhost4.localdomain4
::1     localhost localhost.localdomain localhost6 localhost6.localdomain6

以下是问题发生原因及排查步骤:
启动InfluxDB提示:

2023-11-06T02:18:25.965931Z     error   Failed to start nats streaming server   {"log_id": "0lKbcE1l000", "error": "unable to start a NATS Server on localhost:0"}
Error: unable to start a NATS Server on localhost:0

查看源码,是nats启动不成功。

由于InfluxDB的nats服务没有打印日志,因此自行编写一段测试代码:

package main

import (
	"fmt"
	"github.com/nats-io/gnatsd/logger"
	"github.com/nats-io/gnatsd/server"
	"time"
)

func main() {
	s := server.New(&server.Options{
		Host:    "localhost",
		Port:    4222,
		NoSigs:  true,
		NoLog:   false,
		Debug:   true,
		Trace:   true,
		Logtime: true,
	})
	log := logger.NewStdLogger(true, true, true, false, true)
	s.SetLogger(log, true, true)
	go s.Start()
	fmt.Println("Start success: ", s.ReadyForConnections(10*time.Second))
}

运行代码,提示:

./nats_test 
[1440169] 2023/11/06 10:50:25.750984 [INF] Starting nats-server version 1.3.0
[1440169] 2023/11/06 10:50:25.751034 [DBG] Go build version go1.19.5
[1440169] 2023/11/06 10:50:25.751067 [INF] Git commit [not set]
[1440169] 2023/11/06 10:50:25.751911 [FTL] Error listening on port: localhost:4222, "listen tcp: lookup localhost on [::1]:53: read udp [::1]:21521->[::1]:53: read: connection refused"

有关键词read: connection refused。查看防火墙和NAT文件:

sudo firewall-cmd --state
sudo iptables -L
cat /etc/resolv.conf

一切正常。

谷歌一下,发现这个报错在stackoverflow提到,有答案提示与/etc/hosts文件关联,查看文件:

cat /etc/hosts
192.168.25.xx   xxx
192.168.25.xx   xxx
192.168.25.xx   xxx

发现没有localhost字段。对比查看其他机器上的hosts文件:

127.0.0.1       localhost localhost.localdomain localhost4 localhost4.localdomain4
::1     localhost localhost.localdomain localhost6 localhost6.localdomain6
...

看来是hosts缺失了localhost相关信息。添加后,nats服务正常运行。

补充ChatGPT对于hosts文件的说明:

/etc/hosts 文件是一个用于在本地系统上进行主机名解析的静态映射文件。它通常用于将主机名映射到 IP 地址,以便在本地系统上进行名称解析,而无需依赖 DNS 服务器。
请注意,修改 /etc/hosts 文件只会影响本地系统上的名称解析。这对于在本地测试或配置特定的主机名映射很有用,但不会影响其他设备或远程系统上的名称解析。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值