When using Docker, ESTABLISHED connections don't appear in netstat

前端 未结 2 1733
面向向阳花
面向向阳花 2020-12-31 06:58

I have a docker container running on RHEL 7 with Docker 1.7.0. The program which running in this container listens for TCP connections on port 5000. In my Dockerfile I put t

相关标签:
2条回答
  • 2020-12-31 07:02

    You can either do:

    docker exec <containerid> netstat -tan | grep ESTABLISHED
    

    or if you don't have netstat in your docker image:

    docker inspect -f '{{.State.Pid}}' <containerid> # note the PID
    sudo nsenter -t <pid> -n netstat | grep ESTABLISHED
    

    nsenter is part of util-linux package. (plagiarized @larsks)

    0 讨论(0)
  • 2020-12-31 07:15

    You may use this snippet to get all the ESTABLISHED for all dockers in one row (if you got nsenter)

    docker inspect --format '{{.State.Pid}} {{printf "%.13s" .ID}} {{.Name}}' \
    $(docker ps --format '{{.ID}}') | while read dockpid dockid dockname
        do
        echo $dockid $dockname
        sudo nsenter -t $dockpid -n netstat -pan | grep ESTABLISHED
    done
    

    note the ESTABLISHED in the grep.

    you can change to the listening connection with netstat -pnl both TCP and UDP

    docker inspect --format '{{.State.Pid}} {{printf "%.13s" .ID}} {{.Name}}' \
    $(docker ps --format '{{.ID}}') | while read dockpid dockid dockname
        do
        echo $dockid $dockname
        sudo nsenter -t $dockpid -n netstat -pnl
    done
    

    or only TCP LISTEN

    docker inspect --format '{{.State.Pid}} {{printf "%.13s" .ID}} {{.Name}}' \
    $(docker ps --format '{{.ID}}') | while read dockpid dockid dockname
        do
        echo $dockid $dockname
        sudo nsenter -t $dockpid -n netstat -pnlt
    done
    
    0 讨论(0)
提交回复
热议问题