
들어오는 요청을 수동으로 디버깅하기 위해 docker 컨테이너 내부의 특정 포트에 netcat 수신기를 생성하고 싶지만 docker 내부의 netcat 동작은 dockerized 설정에서 관찰했던 것과 다른 것 같습니다. 바닐라 Ubuntu 18.04를 예로 들면 다음과 같습니다.
sudo docker run -it -p 6010:6010 ubuntu:18.04
# inside container
apt-get update && apt-get install -y netcat net-tools
nc -lk 0.0.0.0 6010 &
# then to verify what I am listening on
netstat -an|grep LISTEN
# example output:
# tcp 0 0 0.0.0.0:39331 0.0.0.0:* LISTEN
어떤 종류의 오류도 없으며 단지 다른 지점을 자동으로 할당할 뿐입니다. Docker화되지 않은 리스너 생성 경험을 통해 오류(예: 포트 가져오기)가 발생하거나 요청한 포트가 성공적으로 할당될 것이라고 생각하곤 했습니다. 여기서 무슨 일이 일어나고 있으며 원하는 포트에서 강제로 청취하는 방법은 무엇입니까?
netcat의 담당자가 다음과 같이 말한 것처럼 잠재적인 제안을 예상하기만 하면 됩니다 -p [port]
.
-l 옵션과 함께 이 옵션을 사용하면 오류가 발생합니다.
답변1
의견에서 제안한 대로 BusyBox netcat 버전에서는 -p
수신 포트를 지정해야 하므로 이 경우 인용한 매뉴얼 페이지는 적용되지 않습니다. BusyBox netcat의 올바른 명령줄은 다음과 같습니다.
nc -l -p 6010 # IP can be left out if it is 0.0.0.0 (all IPs)
내 알파인 버전의 nc에 대한 도움말 페이지는 다음과 같습니다.
/ # nc -v
BusyBox v1.32.1 () multi-call binary.
Usage: nc [OPTIONS] HOST PORT - connect
nc [OPTIONS] -l -p PORT [HOST] [PORT] - listen
-e PROG Run PROG after connect (must be last)
-l Listen mode, for inbound connects
-lk With -e, provides persistent server
-p PORT Local port
-s ADDR Local address
-w SEC Timeout for connects and final net reads
-i SEC Delay interval for lines sent
-n Don't do DNS resolution
-u UDP mode
-v Verbose
-o FILE Hex dump traffic
-z Zero-I/O mode (scanning)```