本文目录导读:

在Shell脚本中查看容器网络连接,主要取决于你使用的容器运行时(Docker、Podman、containerd等),以下是几种常见的方法:
Docker 容器
查看容器内部网络连接
#!/bin/bash
# 方法1:使用 docker exec 进入容器查看
docker exec <容器名或ID> netstat -tlnp
# 或
docker exec <容器名或ID> ss -tlnp
# 或
docker exec <容器名或ID> cat /proc/net/tcp
# 方法2:查看容器网络命名空间
# 获取容器PID
CONTAINER_PID=$(docker inspect --format '{{.State.Pid}}' <容器名或ID>)
# 使用nsenter进入网络命名空间
nsenter -t $CONTAINER_PID -n netstat -tlnp
查看宿主机视角的容器网络
#!/bin/bash
# 查看Docker网络信息
docker network ls
docker network inspect <网络名>
# 查看容器端口映射
docker port <容器名或ID>
# 查看容器IP地址
docker inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <容器名或ID>
# 查看所有容器的网络连接
docker ps --format "table {{.Names}}\t{{.Ports}}"
完整脚本示例
#!/bin/bash
# container_network_check.sh
# 检查容器网络连接的脚本
CONTAINER_NAME="$1"
if [ -z "$CONTAINER_NAME" ]; then
echo "使用方法: $0 <容器名或ID>"
exit 1
fi
# 检查容器是否存在
if ! docker ps --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then
echo "错误: 容器 $CONTAINER_NAME 未运行"
exit 1
fi
echo "=== 容器基本信息 ==="
docker inspect --format '容器名称: {{.Name}}
容器ID: {{.ID}}
状态: {{.State.Status}}
IP地址: {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}
主机名: {{.Config.Hostname}}
' "$CONTAINER_NAME"
echo -e "\n=== 端口映射 ==="
docker port "$CONTAINER_NAME"
echo -e "\n=== 容器内部网络连接 ==="
# 尝试多种方式查看网络连接
echo "--- TCP连接 ---"
docker exec "$CONTAINER_NAME" ss -tlnp 2>/dev/null || \
docker exec "$CONTAINER_NAME" netstat -tlnp 2>/dev/null || \
echo "容器内未安装 ss 或 netstat"
echo -e "\n--- UDP连接 ---"
docker exec "$CONTAINER_NAME" ss -ulnp 2>/dev/null || \
docker exec "$CONTAINER_NAME" netstat -ulnp 2>/dev/null || \
echo "容器内未安装 ss 或 netstat"
echo -e "\n=== 网络接口 ==="
docker exec "$CONTAINER_NAME" ip addr 2>/dev/null || \
docker exec "$CONTAINER_NAME" ifconfig 2>/dev/null || \
echo "容器内未安装 ip 或 ifconfig"
echo -e "\n=== 路由表 ==="
docker exec "$CONTAINER_NAME" ip route 2>/dev/null || \
docker exec "$CONTAINER_NAME" route -n 2>/dev/null || \
echo "容器内未安装 ip 或 route"
使用 nsenter 高级方法
#!/bin/bash
# 使用网络命名空间检查
check_container_network_ns() {
local CONTAINER_NAME="$1"
local CONTAINER_PID
# 获取容器PID
CONTAINER_PID=$(docker inspect --format '{{.State.Pid}}' "$CONTAINER_NAME" 2>/dev/null)
if [ -z "$CONTAINER_PID" ] || [ "$CONTAINER_PID" = "0" ]; then
echo "错误: 无法获取容器PID"
return 1
fi
echo "容器PID: $CONTAINER_PID"
# 进入容器网络命名空间查看
echo "=== 网络接口 ==="
nsenter -t $CONTAINER_PID -n ip addr
echo -e "\n=== 路由表 ==="
nsenter -t $CONTAINER_PID -n ip route
echo -e "\n=== 网络连接 ==="
nsenter -t $CONTAINER_PID -n ss -tlnp
echo -e "\n=== ARP表 ==="
nsenter -t $CONTAINER_PID -n arp -n
}
# 使用示例
check_container_network_ns "your_container_name"
监控所有容器网络
#!/bin/bash
# 监控所有运行容器的网络连接
monitor_all_containers_network() {
local CONTAINERS=$(docker ps --format '{{.Names}}')
for CONTAINER in $CONTAINERS; do
echo "=========================================="
echo "容器: $CONTAINER"
echo "=========================================="
# 获取容器信息
local IP=$(docker inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$CONTAINER")
local PORTS=$(docker port "$CONTAINER" 2>/dev/null)
echo "IP地址: $IP"
echo "端口映射:"
echo "$PORTS"
echo -e "\n活跃连接数:"
docker exec "$CONTAINER" ss -tlnp 2>/dev/null | wc -l || echo "0"
echo ""
done
}
# 执行监控
monitor_all_containers_network
常用查看命令汇总
#!/bin/bash
# 快速查看容器网络状态
quick_network_check() {
local CONTAINER_NAME="$1"
# 1. 查看容器IP
echo "1. IP地址:"
docker inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}} {{.Gateway}}{{end}}' "$CONTAINER_NAME"
# 2. 查看端口映射
echo -e "\n2. 端口映射:"
docker port "$CONTAINER_NAME"
# 3. 查看DNS
echo -e "\n3. DNS配置:"
docker inspect --format '{{.HostConfig.Dns}}' "$CONTAINER_NAME"
# 4. 查看网络模式
echo -e "\n4. 网络模式:"
docker inspect --format '{{.HostConfig.NetworkMode}}' "$CONTAINER_NAME"
# 5. 查看网络连接数
echo -e "\n5. ESTABLISHED连接数:"
docker exec "$CONTAINER_NAME" ss -tlnp 2>/dev/null | grep -c "ESTAB" || echo "0"
}
注意事项
- 容器内工具依赖:部分容器可能没有安装
ss、netstat等网络工具,需要先安装或使用其他方法 - 权限问题:某些操作可能需要
sudo权限 - 安全考虑:在脚本中避免硬编码密码或敏感信息
- 兼容性:不同版本Docker的命令可能略有差异
这些脚本可以根据你的具体需求进行调整和扩展。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播