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

如何从外部连接Docker部署的soketi服务器?

Soketi外部连接问题排查与解决方案

先排查核心问题(无需先上代理)

你当前的情况更可能是容器内部服务监听地址限制,而非必须用Apache代理,先按以下步骤排查:

1. 确认Soketi容器监听全网卡地址

Docker端口映射正常但外部无法访问,大概率是容器内的Soketi只监听了127.0.0.1,导致仅容器内部可访问。

  • 验证:在服务器上执行netstat -tulpn | grep 6001,如果输出显示127.0.0.1:6001,说明端口只绑定了本地回环地址,外部无法访问。
  • 解决:启动容器时添加环境变量强制Soketi监听全网卡:
    docker run -e SOKETI_HOST=0.0.0.0 -p 6001:6001 -p 9601:9601 quay.io/soketi/soketi:1.4-16-debian
    

2. 验证服务器公网IP的可访问性

  • 用服务器公网IP执行curl 你的公网IP:6001,如果本地都无法访问,检查:
    • 云服务器的安全组是否开放了6001端口(部分云服务商防火墙和安全组是分开的)
    • 服务器本地防火墙规则是否生效(比如iptables -L查看是否有拦截规则)

若需通过Apache反向代理(可选)

如果希望用Apache统一管理端口(比如用80/443替代6001),可以配置反向代理,但需注意WebSocket支持:

1. 启用Apache必要模块

a2enmod proxy proxy_http proxy_wstunnel
systemctl restart httpd

2. 添加反向代理配置

在你的Apache虚拟主机配置文件中加入以下内容:

# 代理HTTP请求
ProxyPass /socket.io http://127.0.0.1:6001/socket.io
ProxyPassReverse /socket.io http://127.0.0.1:6001/socket.io
ProxyPass / http://127.0.0.1:6001/
ProxyPassReverse / http://127.0.0.1:6001/

# 代理WebSocket连接(必须配置,否则实时通信失效)
ProxyPass /socket.io/ ws://127.0.0.1:6001/socket.io/
ProxyPassReverse /socket.io/ ws://127.0.0.1:6001/socket.io/

3. 重启Apache并测试

执行systemctl restart httpd,之后通过Apache的端口(如80)访问Soketi即可,无需再暴露6001端口到外部。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 06:22:19