Docker: any way to list open sockets inside a running docker container?

前端 未结 3 1704
遇见更好的自我
遇见更好的自我 2021-01-29 21:53

I would like to execute netstat inside a running docker container to see open TCP sockets and their statuses. But, on some of my docker containers, netstat is not available. Is

3条回答
  •  面向向阳花
    2021-01-29 22:31

    You can use the nsenter command to run a command on your host inside the network namespace of the Docker container. Just get the PID of your Docker container:

    docker inspect -f '{{.State.Pid}}' container_name_or_id
    

    For example, on my system:

    $ docker inspect -f '{{.State.Pid}}' c70b53d98466
    15652
    

    And once you have the PID, use that as the argument to the target (-t) option of nsenter. For example, to run netstat inside the container network namespace:

    $ sudo nsenter -t 15652 -n netstat
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State      
    tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN     
    

    Notice that this worked even though the container does not have netstat installed:

    $ docker exec -it c70b53d98466 netstat
    rpc error: code = 13 desc = invalid header field value "oci runtime error: exec failed: container_linux.go:247: starting container process caused \"exec: \\\"netstat\\\": executable file not found in $PATH\"\n"
    

    (nsenter is part of the util-linux package)

提交回复
热议问题