Docker화할 때 내 WebSocket 서버가 연결에 실패하는 이유는 무엇입니까?

Susan Sarandon
풀어 주다: 2024-11-06 20:09:02
원래의
305명이 탐색했습니다.

Why Does My WebSocket Server Fail to Connect When Dockerized?

WebSocket 서버 Docker화

문제

개발자가 Docker를 사용하여 WebSocket 서버를 컨테이너화하려고 시도하는 동안 문제에 직면합니다. 서버 코드는 "connected"를 사용하여 새 연결에 쓰고 컨테이너 외부에서는 잘 작동하지만 Docker 컨테이너 내부에 배치하면 "read tcp [::1] 오류 메시지와 함께 "연결 재설정" 오류로 인해 클라이언트 패닉이 발생합니다. :60328->[::1]:8000: 읽기: 피어에 의해 연결이 재설정되었습니다." 개발자는 컨테이너 내의 서버에 대한 WebSocket 연결을 설정하는 데 어떤 변경이 필요한지 확신하지 못합니다.

해결책

이 문제를 해결하려면 개발자는 서버의 수신 주소를 수정해야 합니다. . 서버가 컨테이너 내의 IP 주소 127.0.0.1을 수신하도록 제한하는 "localhost:8000"을 사용하는 대신 ":8000"으로 변경해야 합니다.

":8000"을 수신 주소를 사용하면 서버는 컨테이너에 할당된 모든 IP 주소를 수신합니다. 이 수정을 통해 트래픽이 할당된 IP 주소의 컨테이너로 전달될 때 연결을 수락할 준비가 된 수신 서버가 있게 됩니다.

Docker의 역할

Docker는 여기서 중요한 역할을 합니다. 호스트 시스템에서 컨테이너로 트래픽을 전달하는 iptables 규칙을 생성하여 시나리오를 구현합니다. 이러한 규칙은 클라이언트가 컨테이너 내에서 WebSocket 서버와 통신할 수 있도록 하는 데 필수적입니다. 기본적으로 Docker 컨테이너는 호스트 시스템에서 직접 액세스할 수 없는 내부 IP 주소를 수신합니다. Docker가 생성한 iptables 규칙은 이러한 통신 격차를 해소합니다.

이러한 iptables 규칙을 보려면 개발자는 다음 명령을 사용할 수 있습니다.

iptables -n -L
iptables -t nat -n -L
로그인 후 복사

청취 주소 및 Docker의 전달 방식을 이해하면 개발자는 Docker 컨테이너 내의 서버에 대한 WebSocket 연결을 성공적으로 설정하여 "연결 재설정" 오류를 해결하고 예상되는 동작을 활성화할 수 있습니다. 클라이언트 측에서 "연결됨"을 인쇄합니다.

위 내용은 Docker화할 때 내 WebSocket 서버가 연결에 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿