Почему прослушиватель netcat внутри контейнера Ubuntu Docker молча игнорирует указанный порт в пользу случайного?

Почему прослушиватель netcat внутри контейнера Ubuntu Docker молча игнорирует указанный порт в пользу случайного?

Я хотел бы создать прослушиватель netcat на заданном порту внутри контейнера docker, чтобы вручную отлаживать входящие запросы, но поведение netcat внутри docker, похоже, отличается от того, что я привык наблюдать в не-dockerized настройке. Возьмем в качестве примера vanilla 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     

Никаких ошибок, просто молчаливое выделение другой точки. По опыту не-dockerized listener spawning я думал, что получу либо ошибку (например, port took), либо запрошенный порт будет успешно выделен. Что здесь происходит и как принудительно прослушивать нужный порт?

Просто чтобы предвидеть возможные предложения, как говорит человек из 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 в моей версии Alpine:

/ # 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)```

Связанный контент