在使用Docker时,ESTABLISHED连接不会出现在netstat中
我有一个运行在RHEL 7上的Docker容器,Docker 1.7.0。 在这个容器中运行的程序侦听端口5000上的TCP连接。在我的Dockerfile中,我放了EXPOSE 5000这个语句,并使用以下命令运行容器:
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
当我在主机上执行netstat时,我看到了LISTEN套接字:
[root@server bin]# netstat -naop | grep 5000 tcp6 0 0 :::5000 :::* LISTEN 33595/docker-proxy off (0.00/0/0)
我可以通过连接到端口5000上的主机IP地址来连接到应用程序,并且我发送到应用程序的数据到达。 我知道这一点,因为我在应用程序日志中看到它,应用程序也通过套接字发送数据。 不过,在docker主机上我看不到使用netstat的任何ESTABLISHED连接:
[root@server bin]# netstat -naop | grep ESTABLISHED
我在客户端看到没有使用docker的ESTABLISHED连接:
[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)
我没有find任何docker命令等效或类似于netstat这是正常的? 我怎样才能看到ESTABLISHED连接到一个容器或docker代理?
谢谢
你可以做:
docker exec <containerid> netstat -tan | grep ESTABLISHED
或者你的docker镜像中没有netstat:
docker inspect -f '{{.State.Pid}}' <containerid> # note the PID sudo nsenter -t <pid> -n netstat | grep ESTABLISHED
nsenter是util-linux软件包的一部分。 (剽窃@larsks)