Docker容器内connect调用失败(errno 111)求助
解决思路
1. 修正连接目标地址
0.0.0.0是监听专用地址,用来让服务接收来自任意IP的请求,不能作为发起连接的目标地址。容器内发起连接时,0.0.0.0:50000指向的是容器自身的网络栈,而你的GUI前端运行在主机上,所以必须替换成主机的实际IP:
- 在主机执行
ip addr找到局域网IP(比如192.168.1.100) - 将容器内
connect函数的目标地址改为你的主机IP:50000
2. 使用Docker内置主机别名(Linux需额外配置)
Linux环境下Docker默认不支持host.docker.internal,需要启动容器时手动添加映射参数:
docker run --add-host=host.docker.internal:host-gateway -p 50000:50000 my_image
之后容器内可以直接用host.docker.internal:50000作为连接目标,这个地址会自动映射到主机网络栈。
3. 检查主机端服务的监听配置
确保主机上的GUI前端服务监听在0.0.0.0:50000,而非127.0.0.1:50000。如果监听地址是127.0.0.1,服务仅对主机本地可见,容器无法访问,必须改成0.0.0.0开放所有IP访问。
4. 验证端口连通性
- 在容器内执行
ping <主机IP>,确认容器和主机网络可达 - 用
telnet <主机IP> 50000或nc -zv <主机IP> 50000测试端口是否能连通,排查防火墙或端口未开放问题 - 检查主机UFW防火墙:执行
sudo ufw status,确保50000端口允许外部访问,或临时关闭防火墙做测试
5. 临时用host网络模式排查(不推荐生产环境)
如果以上方法无效,可以尝试让容器共享主机网络栈(牺牲隔离性):
docker run --network=host my_image
此时容器内直接用127.0.0.1:50000就能连接主机服务,用来快速排查是否是网络隔离导致的问题。
内容的提问来源于stack exchange,提问作者user1410541
相关产品推荐
相关产品推荐

