查看局域网下的Docker

概述

在本文中,我将向你介绍如何查看局域网下的Docker容器。我们将使用以下步骤来实现这个目标:

  1. 启动一个Docker容器,并在容器中运行一个网络工具。
  2. 使用该网络工具来扫描局域网中的IP地址。
  3. 针对每个IP地址,检查是否运行了Docker容器,并获取容器的详细信息。

接下来,我将逐步指导你完成每个步骤,并提供相应的代码示例。

步骤一:启动Docker容器并运行网络工具

我们将首先启动一个Docker容器,并在容器中运行一个网络工具,以帮助我们扫描局域网中的IP地址。以下是需要执行的命令:

# 1. 拉取并启动一个alpine镜像的Docker容器
docker run -d --name scanner alpine tail -f /dev/null

# 2. 进入容器
docker exec -it scanner sh

# 3. 安装需要的网络工具(例如nmap)
apk update && apk add nmap

上述代码的含义是:

  1. 使用docker run命令拉取并启动一个名为scanner的alpine镜像的Docker容器。
  2. 使用docker exec命令进入该容器的Shell。
  3. 在容器内执行apk update && apk add nmap命令,更新容器并安装nmap工具。

步骤二:扫描局域网中的IP地址

接下来,我们将使用nmap工具来扫描局域网中的IP地址。以下是需要执行的命令:

# 1. 查看本机的IP地址
ip addr show eth0

# 2. 使用nmap扫描局域网中的IP地址
nmap -sn 192.168.0.0/24 > scan.txt

上述代码的含义是:

  1. 使用ip addr show eth0命令查看本机的IP地址。请将eth0替换为你的网络接口名称(例如,eth0enp0s1等)。
  2. 使用nmap -sn 192.168.0.0/24命令扫描局域网中以192.168.0开头的IP地址,并将结果保存到名为scan.txt的文件中。

步骤三:检查Docker容器并获取详细信息

最后,我们将针对步骤二中扫描到的每个IP地址,检查是否运行了Docker容器,并获取容器的详细信息。以下是需要执行的命令:

# 1. 退出容器
exit

# 2. 创建一个用于遍历IP地址的脚本(例如scan.sh)
vi scan.sh

scan.sh文件中,插入以下代码:

#!/bin/sh

# 根据scan.txt中的IP地址列表,遍历每个IP地址
cat scan.txt | grep "Nmap scan report" | awk '{print $NF}' | while read ip
do
  echo "Checking IP: $ip"
  
  # 检查是否运行了Docker容器
  docker ps --filter "ancestor=alpine" --format "{{.ID}}" --filter "expose=1" --filter "network={{.NetworkSettings.Networks.bridge.IPAddress}}" | grep $ip > /dev/null

  # 如果找到匹配的容器,获取容器的详细信息
  if [ $? -eq 0 ]; then
    echo "Docker containers running on IP: $ip"
    docker ps --filter "ancestor=alpine" --filter "expose=1" --filter "network={{.NetworkSettings.Networks.bridge.IPAddress}}" --format "ID: {{.ID}}, Image: {{.Image}}, Port: {{.Ports}}"
  fi
done

上述代码的含义是:

  1. 使用cat scan.txt | grep "Nmap scan report" | awk '{print $NF}'命令从scan.txt文件中提取IP地址列表。
  2. 使用while read ip循环遍历每个IP地址。
  3. 使用docker ps --filter命令检查是否运行了