使用Docker时,已建立的连接不会出现在netstat中

发布于 2021-02-01 12:55:52

我有一个在Docker 1.7.0上的RHEL
7上运行的Docker容器。在此容器中运行的程序侦听端口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建立的任何连接:

[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)

我没有找到与netstat等效或相似的任何docker命令,这正常吗?如何查看到容器或docker-proxy的已建立连接?

谢谢

关注者
0
被浏览
80
1 个回答
  • 面试哥
    面试哥 2021-02-01
    为面试而生,有面试问题,就找面试哥。

    您可以执行以下操作:

    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软件包的一部分。(pla窃@larsks)



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看