Files
server-tools/bash/docker_info.sh

73 lines
3.5 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# ==============================================================================
# Скрипт: docker_info.sh
# Описание: Выводит подробную информацию о запущенных Docker-контейнерах,
# включая их порты, IP-адреса и физическое расположение данных (Mounts).
# ==============================================================================
set -e
# Настраиваем цвета
BLUE='\033[1;34m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
CYAN='\033[0;36m'
NC='\033[0m' # Сброс цвета
echo -e "${BLUE}=== Анализ запущенных Docker контейнеров ===${NC}\n"
# Проверяем, установлен ли Docker
if ! command -v docker &> /dev/null; then
echo -e "${YELLOW}Ошибка: Docker не установлен на этом сервере.${NC}"
exit 1
fi
# Получаем список ID всех запущенных контейнеров
CONTAINERS=$(docker ps -q)
if [ -z "$CONTAINERS" ]; then
echo -e "${GREEN}В данный момент нет запущенных контейнеров.${NC}"
exit 0
fi
# Перебираем каждый контейнер и вытаскиваем нужную информацию
for CONTAINER_ID in $CONTAINERS; do
# Используем docker inspect для точечного извлечения данных
NAME=$(docker inspect --format '{{.Name}}' "$CONTAINER_ID" | sed 's/\///')
IMAGE=$(docker inspect --format '{{.Config.Image}}' "$CONTAINER_ID")
STATE=$(docker inspect --format '{{.State.Status}}' "$CONTAINER_ID")
STARTED=$(docker inspect --format '{{.State.StartedAt}}' "$CONTAINER_ID" | cut -d'.' -f1 | tr 'T' ' ')
IP=$(docker inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$CONTAINER_ID")
PORTS=$(docker ps --filter "id=$CONTAINER_ID" --format "{{.Ports}}")
echo -e "${CYAN}📦 Контейнер:${NC} ${GREEN}$NAME${NC} (ID: ${CONTAINER_ID:0:12})"
echo -e " ├─ ${YELLOW}Образ:${NC} $IMAGE"
echo -e " ├─ ${YELLOW}Статус:${NC} $STATE (Запущен: $STARTED)"
# Обрабатываем IP, если он пустой (например, если используется сеть host)
if [ -z "$IP" ]; then IP="Не назначен (host network?)"; fi
echo -e " ├─ ${YELLOW}Сеть:${NC} IP: $IP"
# Обрабатываем порты
if [ -z "$PORTS" ]; then PORTS="Нет проброшенных портов"; fi
echo -e " ├─ ${YELLOW}Порты:${NC} $PORTS"
echo -e " └─ ${YELLOW}Расположение данных (Mounts):${NC}"
# Получаем пути, куда примонтированы данные (Host -> Container)
MOUNTS=$(docker inspect --format '{{range .Mounts}}{{println .Source " -> " .Destination}}{{end}}' "$CONTAINER_ID")
if [ -z "$MOUNTS" ]; then
echo -e " ${NC}Данные хранятся только внутри контейнера (нет внешних Mounts)${NC}"
else
# Выводим пути с отступом для красоты
echo "$MOUNTS" | while IFS= read -r line; do
if [ -n "$line" ]; then
echo -e " 📁 $line"
fi
done
fi
echo "" # Пустая строка между контейнерами
done
echo -e "${BLUE}=== Анализ завершен ===${NC}"