Ubuntu 도커 컨테이너 내부의 netcat 수신기가 임의의 포트를 선호하여 지정된 포트를 자동으로 무시하는 이유는 무엇입니까?

Ubuntu 도커 컨테이너 내부의 netcat 수신기가 임의의 포트를 선호하여 지정된 포트를 자동으로 무시하는 이유는 무엇입니까?

들어오는 요청을 수동으로 디버깅하기 위해 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)```

관련 정보