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

Docker容器与Windows宿主机双向TCP socket通信搭建问题咨询

容器内Socket客户端与宿主机Socket服务端通信方案

问题原因

你之前的操作混淆了Docker端口映射-p参数的使用场景:-p 宿主机端口:容器端口的作用是让Docker守护进程预先占用宿主机指定端口,将该端口收到的流量转发到容器对应端口,仅适用于容器内运行服务端、外部/宿主机作为客户端访问的场景。你当前场景是容器为客户端、宿主机为服务端,不需要做入站端口映射,所以预先绑定宿主机5997端口才会导致冲突。

正确配置步骤

  • 第一步:启动容器时去掉端口映射参数,无需占用宿主机端口
    常规启动命令为:
    docker run -it --name ubuntu1 ubuntu /bin/bash
    
    如果你的Docker版本较低,无法自动解析宿主机地址,可额外添加host映射参数:
    docker run -it --name ubuntu1 --add-host=host.docker.internal:host-gateway ubuntu /bin/bash
    
  • 第二步:配置宿主机Java Socket服务端
    服务端监听地址设置为0.0.0.0(不要仅监听127.0.0.1,否则容器无法访问),监听端口设置为5997,正常启动服务端即可,不会再出现端口被占用的报错。
  • 第三步:配置容器内Socket客户端
    客户端连接的目标地址填写Docker Desktop内置的宿主机域名host.docker.internal,目标端口填写5997,即可正常与宿主机服务端建立TCP连接,实现双向通信。

可用性验证

容器内可先执行ping host.docker.internal验证网络连通性,也可通过telnet host.docker.internal 5997验证端口是否可访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 01:06:01