开发人员在尝试使用 Docker 容器化 WebSocket 服务器时遇到问题。服务器代码使用“connected”写入新连接,并且在容器外运行良好,但当放置在 Docker 容器内时,客户端会由于“连接重置”错误而出现恐慌,并显示错误消息“read tcp [::1]” :60328->[::1]:8000: 读取: 连接被对等方重置。"开发者不确定需要进行哪些更改才能在容器内建立与服务器的 WebSocket 连接。
要解决此问题,开发者需要修改服务器的监听地址。他们应该将其更改为“:8000”,而不是使用“localhost:8000”(这会限制服务器侦听容器内的 IP 地址 127.0.0.1)。
通过使用“:8000”作为监听地址,服务器将监听分配给容器的所有IP地址。此修改确保当流量转发到分配的 IP 地址上的容器时,将有一个侦听服务器准备好接受连接。
Docker 在这方面发挥着至关重要的作用通过创建 iptables 规则将流量从主机转发到容器来实现场景。这些规则对于允许客户端与容器内的 WebSocket 服务器进行通信至关重要。默认情况下,Docker 容器侦听其内部 IP 地址,这些地址无法从主机直接访问。 Docker 创建的 iptables 规则弥补了这种通信差距。
要查看这些 iptables 规则,开发人员可以使用以下命令:
iptables -n -L iptables -t nat -n -L
通过对监听地址进行上述更改,并了解 Docker 的转发机制后,开发人员可以在 Docker 容器内成功建立与服务器的 WebSocket 连接,解决“连接重置”错误并实现在客户端打印“已连接”的预期行为。
以上是为什么我的 WebSocket 服务器在 Docker 化后无法连接?的详细内容。更多信息请关注PHP中文网其他相关文章!