使用 Docker 时,ESTABLISHED 连接不会出现在 netstat 中
When using Docker, ESTABLISHED connections don't appear in netstat
我在 Docker 1.7.0 的 RHEL 7 上有一个 docker 容器 运行ning。 运行ning 在此容器中的程序在端口 5000 上侦听 TCP 连接。
在我的 Docker 文件中,我将句子 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
我看到客户端的 ESTABLISHED 连接没有使用 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)
我没有找到任何 docker 与 netstat 等效或相似的命令
这是正常的吗?如何查看与容器或 docker-proxy 的 ESTABLISHED 连接?
谢谢
您可以:
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)
您可以使用此代码段获取一行中所有码头工人的所有 ESTABLISHED(如果您有 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
请注意 grep
中的 ESTABLISHED。
您可以更改为使用 netstat -pnl
TCP 和 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
或仅 TCP 侦听
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
我在 Docker 1.7.0 的 RHEL 7 上有一个 docker 容器 运行ning。 运行ning 在此容器中的程序在端口 5000 上侦听 TCP 连接。 在我的 Docker 文件中,我将句子 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
我看到客户端的 ESTABLISHED 连接没有使用 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)
我没有找到任何 docker 与 netstat 等效或相似的命令 这是正常的吗?如何查看与容器或 docker-proxy 的 ESTABLISHED 连接?
谢谢
您可以:
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)
您可以使用此代码段获取一行中所有码头工人的所有 ESTABLISHED(如果您有 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
请注意 grep
中的 ESTABLISHED。
您可以更改为使用 netstat -pnl
TCP 和 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
或仅 TCP 侦听
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