You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker Compose容器间访问5001端口报connection refused排查

问题根因

你的Docker Compose网络配置本身没有问题:同自定义bridge网络下可以通过服务名解析到容器IP,ping server能通已经证明网络层连通性、DNS解析都是正常的。出现connection refused、nmap显示端口全关闭,说明请求已经到达server容器的网络栈,但对应端口没有进程对外提供服务,直接返回了RST重置包,核心问题几乎都是server端服务的监听地址配置错误。

排查&修复步骤
  • 第一步:确认server容器内端口实际监听状态
    先在宿主机执行命令进入server容器:

    docker exec -it wanderingreader-server-1 /bin/sh
    

    容器内执行以下命令查看5001端口的监听情况:

    # 有netstat的话用这个
    netstat -tulpn | grep 5001
    # 镜像里没装netstat的话用ss
    ss -tulpn | grep 5001
    

    90%以上的场景你会看到输出里的监听地址是127.0.0.1:5001——这就是问题所在:服务只绑定了容器内部的回环地址,只有容器自身的进程能访问这个端口,其他容器、宿主机的流量都会被拒绝。

  • 第二步:修改server服务的监听配置
    找到你server端服务的启动配置,把绑定地址从127.0.0.1改成0.0.0.0(即绑定容器内所有网卡),常见Python服务的改法参考:

    • Flask:启动参数改为app.run(host='0.0.0.0', port=5001)
    • Uvicorn/FastAPI:启动命令加--host 0.0.0.0参数,即uvicorn 你的启动文件:app --host 0.0.0.0 --port 5001
    • 其他框架:检查启动代码/配置文件里的bind、host相关配置,确保不是绑定127.0.0.1
      修改后重新构建、启动server容器,再进容器执行上面的netstat/ss命令,确认监听地址显示为0.0.0.0:5001即可。
  • 第三步:注意正确的访问方式
    从client容器访问server服务时,地址直接写http://server:5001即可,不要写localhost:5001或者127.0.0.1:5001——这两个地址指向的是client容器自身,不是server服务。

额外说明

你配置里的ports字段作用是把容器端口映射到宿主机,供宿主机或外部网络访问,同Docker自定义网络内的容器互访完全不需要依赖ports配置,就算把server下的ports段全部删掉,只要服务正确监听0.0.0.0,client一样可以正常访问。

内容的提问来源于stack exchange,提问作者Ant

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 08:15:44