Maison > Article > développement back-end > Pourquoi mon serveur WebSocket ne parvient-il pas à se connecter lorsqu'il est dockerisé ?
Un développeur rencontre des problèmes en tentant de conteneuriser un serveur WebSocket à l'aide de Docker. Le code du serveur écrit sur une nouvelle connexion avec « connecté » et fonctionne bien en dehors du conteneur, mais lorsqu'il est placé à l'intérieur d'un conteneur Docker, le client panique à cause d'une erreur de « réinitialisation de connexion » avec le message d'erreur « read tcp [::1] :60328->[::1]:8000 : lecture : connexion réinitialisée par le homologue." Le développeur n'est pas sûr des modifications nécessaires pour établir une connexion WebSocket au serveur dans le conteneur.
Pour résoudre ce problème, le développeur doit modifier l'adresse d'écoute du serveur. . Au lieu d'utiliser "localhost:8000", qui limite le serveur à écouter sur l'adresse IP 127.0.0.1 dans le conteneur, ils devraient la remplacer par ":8000".
En utilisant ":8000" comme Adresse d'écoute, le serveur écoutera toutes les adresses IP attribuées au conteneur. Cette modification garantit que lorsque le trafic est transféré vers le conteneur sur son adresse IP attribuée, il y aura un serveur d'écoute prêt à accepter la connexion.
Docker joue un rôle crucial à cet égard. scénario en créant des règles iptables pour transférer le trafic de la machine hôte vers le conteneur. Ces règles sont essentielles pour permettre au client de communiquer avec le serveur WebSocket au sein du conteneur. Par défaut, les conteneurs Docker écoutent sur leurs adresses IP internes, qui ne sont pas directement accessibles depuis la machine hôte. Les règles iptables créées par Docker comblent ce fossé de communication.
Pour afficher ces règles iptables, le développeur peut utiliser les commandes suivantes :
iptables -n -L iptables -t nat -n -L
En apportant la modification mentionnée à l'adresse d'écoute et en comprenant le transfert de Docker机制, le développeur peut réussir à établir une connexion WebSocket au serveur dans le conteneur Docker, résolvant l'erreur de « réinitialisation de la connexion » et activant le comportement attendu d'impression « connecté » du côté client.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!