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

Docker部署Python Socket服务遇ConnectionRefusedError求助

解决Docker中Python Socket服务连接被拒绝的问题

问题根源

  • 服务端绑定地址受限:原代码中SERVER = socket.gethostbyname(socket.gethostname())仅绑定容器内部的私有IP,该地址仅在Docker内部网络有效,宿主机或外部客户端无法直接访问。
  • Docker端口未映射:未将容器内的服务端口映射到宿主机,导致外部请求无法转发到容器内的服务。
  • 客户端连接地址错误:客户端若在宿主机运行,直接使用容器IP无法建立连接;若在Docker内运行,未与服务端容器处于同一网络也会导致连接失败。

修复步骤

1. 修改服务端绑定地址

将服务端的SERVER变量改为0.0.0.0,让服务监听容器内所有网络接口,允许外部通过映射端口访问:

HEADER = 64
PORT = 5050
SERVER = '0.0.0.0'  # 修改此处
ADDR = (SERVER, PORT)
FORMAT = 'utf-8'
DISCONNECTED_MESSAGE = "!DISCONNECT"

# 后续代码保持不变

2. 启动Docker容器时映射端口

运行容器时使用-p参数,将容器的5050端口映射到宿主机的对应端口(示例中使用相同端口):

docker run -p 5050:5050 your-python-server-image

3. 调整客户端连接地址

根据客户端运行环境选择对应配置:

  • 客户端在宿主机运行:将SERVER改为宿主机IP或localhost(依赖端口映射):
    SERVER = 'localhost'  # 或宿主机实际IP,如192.168.1.100
    ADDR = (SERVER, 5050)
    
  • 客户端在Docker容器运行:
    1. 创建自定义Docker网络:docker network create socket-network
    2. 启动服务端容器时加入网络:docker run -p 5050:5050 --network socket-network --name socket-server your-python-server-image
    3. 客户端代码中SERVER改为服务端容器名称(socket-server),Docker会自动解析为容器IP:
      SERVER = 'socket-server'
      ADDR = (SERVER, 5050)
      
    4. 启动客户端容器时加入同一网络:docker run --network socket-network your-python-client-image

4. 验证服务状态

启动服务端容器后,查看日志确认服务监听地址:

docker logs socket-server

应看到[LISTENING] Server is listening on 0.0.0.0的输出。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 18:33:39