"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Por que meu servidor WebSocket não consegue se conectar quando está dockerizado?

Por que meu servidor WebSocket não consegue se conectar quando está dockerizado?

Publicado em 23/12/2024
Navegar:730

Why Does My WebSocket Server Fail to Connect When Dockerized?

Dockerizando um servidor WebSocket

O problema

Um desenvolvedor encontra problemas ao tentar conteinerizar um servidor WebSocket usando Docker. O código do servidor grava em uma nova conexão com "conectado" e funciona bem fora do contêiner, mas quando colocado dentro de um contêiner Docker, o cliente entra em pânico devido a um erro de "redefinição de conexão" com a mensagem de erro "ler tcp [::1] :60328->[::1]:8000: leitura: conexão redefinida pelo par." O desenvolvedor não tem certeza de quais mudanças são necessárias para estabelecer uma conexão WebSocket com o servidor dentro do contêiner.

A solução

Para resolver esse problema, o desenvolvedor precisa modificar o endereço de escuta do servidor . Em vez de usar "localhost:8000", que limita o servidor a escutar o endereço IP 127.0.0.1 dentro do contêiner, eles devem alterá-lo para ":8000."

Usando ":8000" como o endereço de escuta, o servidor escutará todos os endereços IP atribuídos ao contêiner. Essa modificação garante que quando o tráfego for encaminhado para o contêiner em seu endereço IP atribuído, haverá um servidor de escuta pronto para aceitar a conexão.

Função do Docker

Docker desempenha um papel crucial nisso cenário criando regras de iptables para encaminhar o tráfego da máquina host para o contêiner. Essas regras são essenciais para permitir que o cliente se comunique com o servidor WebSocket dentro do contêiner. Por padrão, os contêineres Docker escutam seus endereços IP internos, que não são acessíveis diretamente na máquina host. As regras de iptables criadas pelo Docker preenchem essa lacuna de comunicação.

Para visualizar essas regras de iptables, o desenvolvedor pode usar os seguintes comandos:

iptables -n -L
iptables -t nat -n -L

Ao fazer a alteração mencionada no endereço de escuta e entender a solução de encaminhamento do Docker, o desenvolvedor pode estabelecer com êxito uma conexão WebSocket com o servidor dentro do contêiner Docker, resolvendo o problema de "redefinição de conexão " erro e habilitando o comportamento esperado de impressão "conectado" no lado do cliente.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3