0
클라이언트 및 서버 응용 프로그램이 있습니다. 서버는 TCP localhost:3344
주소로 청취하고 클라이언트는 localhost:3344
으로 메시지를 보냅니다. 동일한 호스트에서 실행하면 정상적으로 작동합니다.클라이언트 및 서버 응용 프로그램이 컨테이너 및 호스트에서 실행 중일 때 통신 할 수 없습니까?
서버가 도커 컨테이너에서 실행 중이고 클라이언트가 호스트에서 실행 중이면 서버에서 메시지를받지 못합니다. 컨테이너가 호스트의 localhost에서 수신하도록 네트워킹을 설정하는 방법을 잘 모릅니다.
이docker run -it --expose 3344 -p 127.0.0.1:3344:3344 run-server
가 0.0.0.0 또는 로컬 호스트에서 수신 서버인가요? 서버가 로컬 호스트에서 수신 대기 중이면 외부에서가 아니라 도커 컨테이너의 IP 주소에서 생성 된 요청 만 수신합니다. 도커 컨테이너의 IP는 호스트 IP와 다릅니다. – Cyclops
서버가 0.0.0.0이 아닌 로컬 호스트에서 수신 대기 중 – Cory
그러면 서버가 '0.0.0.0'에서 수신하도록해야합니다. 도커 실행 명령에'-p 127.0.0.1 : 3344 : 3344'을 지정했기 때문에 docker는 127.0.0.1:3344 (호스트)의 패킷 만 서버 컨테이너의 3344 포트로 전달하는 Iptable 규칙을 만듭니다. 따라서 호스트가 아닌 다른 누구도 도커 컨테이너에서 실행중인 서버로 요청을 보낼 수는 없습니다. – Cyclops