开发人员在尝试使用 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连接,解决“连接重置”问题”错误并启用在客户端打印“已连接”的预期行为。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3