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 the sentence EXPOSE 5000 and I run the container with the following command:
docker run \
--name myProgram \
--detach \
--publish 5000:5000 \
--volume /home/docker/apps/myProgram/logs:/var/log/myProgram/ \
--volume /home/docker/apps/myProgram/conf:/usr/local/snnotificationreceiver/conf/ \
--restart always \
10.167.152.15:5000/myProgram:1.0.0
When I execute netstat on the host I see the LISTEN socket:
[root@server bin]# netstat -naop | grep 5000
tcp6 0 0 :::5000 :::* LISTEN 33595/docker-proxy off (0.00/0/0)
I can connect to the application by connecting to the host ip address on port 5000 and the data I send to the application arrives. I know this because I see it on my application logs, the application also sends data through the socket. However I don't see any ESTABLISHED connections using netstat on the docker host:
[root@server bin]# netstat -naop | grep ESTABLISHED
I see the ESTABLISHED connection on the client side which doesn't use docker:
[root@client ~]# netstat -naop | grep 5000
tcp 0 0 10.167.43.73:39218 10.167.152.138:5000 ESTABLISHED 21429/telnet off (0.00/0/0)
I didn't find any docker command equivalent or similar to netstat Is this normal? How can I see the ESTABLISHED connections to a container or to the docker-proxy?
Thanks
You can either do:
or if you don't have netstat in your docker image:
nsenter is part of util-linux package. (plagiarized @larsks)
You may use this snippet to get all the ESTABLISHED for all dockers in one row (if you got
nsenter
)note the ESTABLISHED in the
grep
.you can change to the listening connection with
netstat -pnl
both TCP and UDPor only TCP LISTEN