zhcn 技术 游戏 如何检查 Docker 容器中已建立的网络连接

如何检查 Docker 容器中已建立的网络连接

查看和管理 Docker 容器建立的网络连接。

使用 Docker 容器时,您经常需要检查容器使用的网络连接以进行初始调试或故障排除。您可能想查看哪些 IP 正在侦听端口或容器中当前有多少连接处于活动状态。

Docker 是一个隔离环境,因此在服务器上运行 netstat 不会为您的容器提供网络连接。相反,您需要进入容器内部并运行 netstat,或远程运行它。

让我们看看这两个选项……

如何检查 Docker 容器中已建立的网络连接
如何检查 Docker 容器中已建立的网络连接

# 1.进入Docker容器并运行netstat

第一步是找到要排除故障的容器的容器 ID。

 $ docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                NAMES
0ce7cfb9be37   nginx     "/docker-entrypoint.…"   2 minutes ago   Up 2 minutes   0.0.0.0:80->80/tcp   web-server
4ab8551671d7   nginx     "/docker-entrypoint.…"   6 minutes ago   Up 6 minutes   80/tcp               vigilant_ganguly
$

我们要在这里排除故障的容器是 ID 为0ce7cfb9be37的容器。要获取此容器的 shell (bash) 会话,请使用:

 $ docker exec -it 0ce7cfb9be37 bash

这将在容器内显示 bash 提示符。

 root@0ce7cfb9be37:/#

安装netstat软件包允许您搜索已建立的网络连接。默认情况下,这些实用程序在容器内可能不可用。

因此要安装它,请使用:

 apt update
apt install net-tools

您现在可以像往常一样使用 netstat 命令。

 # netstat -an

输出:

 Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN
tcp        0      0 172.17.0.3:80           223.233.99.46:64429     FIN_WAIT2
tcp        0      0 172.17.0.3:80           223.233.99.46:4811      ESTABLISHED
tcp        0      0 172.17.0.3:80           223.233.99.46:64430     FIN_WAIT2
tcp        0      0 172.17.0.3:80           223.233.99.46:4810      ESTABLISHED
tcp6       0      0 :::80                   :::*                    LISTEN
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  3      [ ]         STREAM     CONNECTED     35748
unix  3      [ ]         STREAM     CONNECTED     35749

从上面的输出中可以看到,列出了已建立的连接及其源地址和目标地址。要查看哪些进程正在侦听端口,您可以使用:

 # netstat -tulnp

输出:

 Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1/nginx: master pro
tcp6       0      0 :::80                   :::*                    LISTEN      1/nginx: master pro 
如何检查 Docker 容器中已建立的网络连接
如何检查 Docker 容器中已建立的网络连接

# 2.不进入容器运行netstat

首先,您需要使用docker ps命令获取容器 ID。

 [root@relicflare-shared-services ~]# docker ps
CONTAINER ID   IMAGE                      COMMAND                  CREATED      STATUS      PORTS                    NAMES
e5db9a01d4a8   postgres:13.1-alpine       "docker-entrypoint.s…"   9 days ago   Up 9 days   0.0.0.0:5432->5432/tcp   relicflare_server_postgres
[root@relicflare-shared-services ~]#

接下来,运行如下 docker 命令来查看与容器建立的所有连接。

 docker exec e5db9a01d4a8 netstat |grep ESTABLISHED 

这会产生以下结果:

 [root@relicflare-shared-services ~]# docker exec e5db9a01d4a8 netstat | grep ESTABLISHED
tcp        0      0 e5db9a01d4a8:postgresql 161.35.XXX.XXX:49128    ESTABLISHED 
udp        0      0 localhost:48818         localhost:48818         ESTABLISHED 
[root@relicflare-shared-services ~]# 

因此,我们的想法是将 netstat 命令与docker exec命令一起运行。

如何检查 Docker 容器中已建立的网络连接
如何检查 Docker 容器中已建立的网络连接

结论

现在您已经掌握了必要的连接详细信息,您可以进一步检查 Docker 日志和进程日志以进一步排除故障。

如何检查 Docker 容器中已建立的网络连接
如何检查 Docker 容器中已建立的网络连接

通俗易懂的讲解《如何检查Docker容器中建立的网络连接》!您必须观看的最佳 2 个视频

『5分x10回で学ぶ 開発者のためのDocker コンテナ入門』第6章
https://www.youtube.com/watch?v=t11cYujAEjU&pp=ygVYIERvY2tlcuOCs-ODs-ODhuODiuOBp-eiuueri-OBleOCjOOBn-ODjeODg-ODiOODr-ODvOOCr-aOpee2muOCkueiuuiqjeOBmeOCi-aWueazlSZobD1KQQ%3D%3D

查看和管理 Docker 容器建立的网络连接。

使用 Docker 容器时,您经常需要检查容器使用的网络连接以进行初始调试或故障排除。您可能想查看哪些 IP 正在侦听端口或容器中当前有多少连接处于活动状态。

Docker 是一个隔离环境,因此在服务器上运行 netstat 不会为您的容器提供网络连接。相反,您需要进入容器内部并运行 netstat,或远程运行它。

让我们看看这两个选项……

如何检查 Docker 容器中已建立的网络连接
如何检查 Docker 容器中已建立的网络连接

# 1.进入Docker容器并运行netstat

第一步是找到要排除故障的容器的容器 ID。

 $ docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                NAMES
0ce7cfb9be37   nginx     "/docker-entrypoint.…"   2 minutes ago   Up 2 minutes   0.0.0.0:80->80/tcp   web-server
4ab8551671d7   nginx     "/docker-entrypoint.…"   6 minutes ago   Up 6 minutes   80/tcp               vigilant_ganguly
$

我们要在这里排除故障的容器是 ID 为0ce7cfb9be37的容器。要获取此容器的 shell (bash) 会话,请使用:

 $ docker exec -it 0ce7cfb9be37 bash

这将在容器内显示 bash 提示符。

 root@0ce7cfb9be37:/#

安装netstat软件包允许您搜索已建立的网络连接。默认情况下,这些实用程序在容器内可能不可用。

因此要安装它,请使用:

 apt update
apt install net-tools

您现在可以像往常一样使用 netstat 命令。

 # netstat -an

输出:

 Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN
tcp        0      0 172.17.0.3:80           223.233.99.46:64429     FIN_WAIT2
tcp        0      0 172.17.0.3:80           223.233.99.46:4811      ESTABLISHED
tcp        0      0 172.17.0.3:80           223.233.99.46:64430     FIN_WAIT2
tcp        0      0 172.17.0.3:80           223.233.99.46:4810      ESTABLISHED
tcp6       0      0 :::80                   :::*                    LISTEN
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  3      [ ]         STREAM     CONNECTED     35748
unix  3      [ ]         STREAM     CONNECTED     35749

从上面的输出中可以看到,列出了已建立的连接及其源地址和目标地址。要查看哪些进程正在侦听端口,您可以使用:

 # netstat -tulnp

输出:

 Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1/nginx: master pro
tcp6       0      0 :::80                   :::*                    LISTEN      1/nginx: master pro 
如何检查 Docker 容器中已建立的网络连接
如何检查 Docker 容器中已建立的网络连接

# 2.不进入容器运行netstat

首先,您需要使用docker ps命令获取容器 ID。

 [root@relicflare-shared-services ~]# docker ps
CONTAINER ID   IMAGE                      COMMAND                  CREATED      STATUS      PORTS                    NAMES
e5db9a01d4a8   postgres:13.1-alpine       "docker-entrypoint.s…"   9 days ago   Up 9 days   0.0.0.0:5432->5432/tcp   relicflare_server_postgres
[root@relicflare-shared-services ~]#

接下来,运行如下 docker 命令来查看与容器建立的所有连接。

 docker exec e5db9a01d4a8 netstat |grep ESTABLISHED 

这会产生以下结果:

 [root@relicflare-shared-services ~]# docker exec e5db9a01d4a8 netstat | grep ESTABLISHED
tcp        0      0 e5db9a01d4a8:postgresql 161.35.XXX.XXX:49128    ESTABLISHED 
udp        0      0 localhost:48818         localhost:48818         ESTABLISHED 
[root@relicflare-shared-services ~]# 

因此,我们的想法是将 netstat 命令与docker exec命令一起运行。

如何检查 Docker 容器中已建立的网络连接
如何检查 Docker 容器中已建立的网络连接

结论

现在您已经掌握了必要的连接详细信息,您可以进一步检查 Docker 日志和进程日志以进一步排除故障。

如何检查 Docker 容器中已建立的网络连接
如何检查 Docker 容器中已建立的网络连接

通俗易懂的讲解《如何检查Docker容器中建立的网络连接》!您必须观看的最佳 2 个视频

『5分x10回で学ぶ 開発者のためのDocker コンテナ入門』第6章
https://www.youtube.com/watch?v=t11cYujAEjU&pp=ygVYIERvY2tlcuOCs-ODs-ODhuODiuOBp-eiuueri-OBleOCjOOBn-ODjeODg-ODiOODr-ODvOOCr-aOpee2muOCkueiuuiqjeOBmeOCi-aWueazlSZobD1KQQ%3D%3D