обавлен скрипт для просмотра информации о Docker-контейнерах
This commit is contained in:
73
bash/docker_info.sh
Normal file
73
bash/docker_info.sh
Normal file
@@ -0,0 +1,73 @@
|
||||
#!/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}"
|
||||
Reference in New Issue
Block a user