login
解决go-cqhttp签名服务器连接问题
2025/08/06·StepFun can make mistakes, check important info.
我通过运行go-cqhttp.bat文件+docker中的签名服务器名为dockerpro8.9.63来扫码登录QQ,现在我运行bat文件之后报错[2025-08-06 17:13:33] [WARNING]: 获取sso sign时出现错误: Post "http://127.0.0.1:8080/sign": dial tcp 127.0.0.1:8080: connectex: No connection could be made because the target machine actively refused it. server: http://127.0.0.1:8080/。我要怎么解决
Reason
思考过程

我们遇到的问题是:在运行go-cqhyte.bat文件时,出现错误提示“获取sso sign时出现错误”,原因是无法连接到本地的8080端口(即docker中的签名服务器)。

错误信息中提到的关键点是:
Post "http://127.0.0.1:8080/sign": dial tcp 127.0.0.1:8080: connectex: No connection could be made because the target machine actively refused it.

这意味着go-cqhttp尝试访问本地的8080端口,但该端口没有被监听(没有运行相应的服务)或者服务未启动。

根据你的描述,你使用了名为dockerpro8.9.63的签名服务器(运行在docker中)。因此,我们需要确保以下几点:

  1. Docker容器是否已启动并运行签名服务器?
    签名服务器应该在docker中运行,并且监听8080端口。你需要检查docker容器是否已经启动,并且暴露的端口是8080(或者你映射到了其他端口,但错误信息中显示的是8080,所以这里假设你映射了8080)。

  2. 端口映射是否正确?
    在启动docker容器时,需要将容器内部的端口映射到宿主机的端口。例如,如果容器内部的应用监听8080端口,那么启动容器时应该使用类似-p 8080:8080的参数。请确认你的命令中包含了端口映射。

  3. go-cqhttp.bat文件中的配置是否正确?
    go-cqhttp的配置文件中应该指定了签名服务器的地址和端口。确保配置文件中填写的地址是127.0.0.1:8080(或者你实际映射的地址和端口)。

  4. 防火墙或安全软件是否阻止了连接?
    检查宿主机的防火墙或安全软件(如Windows Defender)是否阻止了8080端口的连接。

  5. Docker容器的网络模式是否正确?
    如果go-cqhttp和docker容器不在同一个网络内,也可能导致无法连接。通常使用host网络模式或者确保两者在同一网桥网络中。但如果是本地测试,使用-p 8080:8080通常可以解决。

接下来,我们可以按照以下步骤排查和解决:

步骤1:检查docker容器是否运行
打开命令行工具(CMD或PowerShell),执行以下命令:
docker ps
查看名为dockerpro8.9.63的容器是否在运行。如果没有运行,使用docker start dockerpro8.9.63启动它。

步骤2:检查端口映射
如果容器已经运行,检查容器的端口映射情况,执行:
docker port dockerpro8.9.63
或者
docker inspect dockerpro8.9.63 | findstr "Ports"
确保8080端口已经映射到宿主机。如果映射的端口不是8080(比如映射到其他端口),那么需要在go-cqhttp的配置文件中修改对应的端口。

步骤3:检查go-cqhttp的配置文件
打开go-cqhttp的配置文件(通常是config.yml),找到与签名服务器相关的配置项。例如:
sign_server: http://127.0.0.1:8080/sign
确保这里的地址和端口与你的docker容器映射的地址和端口一致。

步骤4:检查防火墙设置
在Windows的“控制面板”->“系统和安全”->“Windows Defender 防火墙”->“高级设置”中,检查入站规则是否允许8080端口的TCP连接。如果没有,可以添加一个入站规则允许8080端口的连接。

步骤5:重启服务
在确保以上步骤都正确后,重启go-cqhttp和docker容器。

步骤6:如果仍然无法连接,尝试使用curl测试端口
在命令行中执行:
curl http://127.0.0.1:8080/sign
如果返回连接拒绝,说明docker容器内的服务没有启动或者端口映射有问题。如果能够返回结果(可能是HTML错误页面),则说明端口通,问题可能出在go-cqhttp的配置或应用本身。

另外,注意签名服务器的日志。你可以通过以下命令查看容器的日志:
docker logs dockerpro8.9.63
看看签名服务器是否正常启动,并且没有报错。

如果以上步骤都无法解决,你可能需要:

  • 检查签名服务器的docker镜像是否正确(是否是你需要的版本)
  • 重新创建docker容器,确保使用正确的命令(例如:docker run --name dockerpro8.9.63 -p 8080:8080 你的镜像名
  • 查阅go-cqhttp和签名服务器的官方文档,确认配置和运行方式

希望这些步骤能帮助你解决问题!

根据你的报错信息,问题出在签名服务器无法连接。以下是分步解决方案:

1. 检查签名服务器(Docker)状态

bash

2. 验证端口映射是否正确

确保 Docker 容器已将内部端口映射到宿主机的 8080 端口:

bash

✅ 正确输出示例:0.0.0.0:8080->8080/tcp
❌ 如果无输出,说明端口未映射,需要重新创建容器:

bash

3. 检查签名服务器内部是否监听 8080 端口

进入容器内部验证:

bash

✅ 如果看到 LISTEN 则正常,否则需要检查服务器应用配置。

4. 检查 go-cqhttp 配置文件

打开 go-cqhttp.bat 同目录下的 config.yml,确认:

yaml

如果 Docker 使用其他 IP(如虚拟机),改为实际 IP 而非 127.0.0.1

5. 关闭防火墙/安全软件

  • 临时关闭 Windows Defender 防火墙(控制面板 → 系统和安全 → Windows Defender 防火墙)
  • 退出 360 安全卫士/腾讯电脑管家等安全软件

6. 重置网络栈(终极方案)

如果上述步骤无效,重置 TCP/IP 栈:

bash

7. 排查日志

查看签名服务器日志定位问题:

bash
  • 如果日志中有 Error: listen EADDRINUSE → 端口被其他程序占用
  • 如果日志无输出 → 服务器未启动成功

常见问题原因

问题原因解决方案
Docker 容器未运行docker start dockerpro8.9.63
端口映射缺失重建容器并添加 -p 8080:8080
防火墙拦截临时关闭防火墙
签名服务器内部故障检查服务器日志并重启
go-cqhttp 配置错误核对 config.yml 中的地址

完成以上操作后,重新运行 go-cqhttp.bat 即可正常扫码登录。