← Назад к вопросам

Что показывает docker inspect

1.8 Middle🔥 161 комментариев
#Docker и контейнеризация

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Команда docker inspect

docker inspect — это одна из фундаментальных команд Docker CLI, предназначенная для получения подробной низкоуровневой информации об объектах Docker в формате JSON. Это ваш "швейцарский нож" для отладки, аудита и глубокого анализа состояния контейнерной инфраструктуры. Команда не изменяет состояние объектов, а только выводит данные.

Какие объекты можно инспектировать?

Команда работает с большинством сущностей Docker:

  • Контейнеры (по умолчанию): docker inspect <container_id_or_name>
  • Образы: docker inspect <image_id_or_name>
  • Тома (Volumes): docker inspect <volume_name>
  • Сети (Networks): docker inspect <network_name>
  • Плагины, узлы Swarm (Nodes), сервисы Swarm (Services) и другие.

Ключевые разделы вывода (на примере контейнера)

Вывод команды — это обширный JSON-объект. Вот наиболее важные и часто используемые секции:

  1. State: Критически важный раздел для мониторинга. Показывает текущий статус контейнера (Running, Exited, Paused), код выхода (ExitCode), время запуска и завершения, а также флаг перезапуска (Restarting). Позволяет быстро диагностировать причины падений.

    "State": {
        "Status": "running",
        "Running": true,
        "Paused": false,
        "Restarting": false,
        "OOMKilled": false,
        "Dead": false,
        "Pid": 12345,
        "ExitCode": 0,
        "StartedAt": "2024-01-15T10:30:00.123456789Z",
        "FinishedAt": "0001-01-01T00:00:00Z"
    }
    
  2. Config и HostConfig: Здесь содержится конфигурация контейнера. Config — это настройки из образа и команды docker run (например, Cmd, Entrypoint, Env, Labels, ExposedPorts). HostConfig — это параметры, специфичные для хоста, такие как лимиты ресурсов (Memory, NanoCpus), политики перезапуска (RestartPolicy), биндинги портов (PortBindings), маунты (Binds) и т.д.

    # Пример: быстро получить переменные окружения контейнера
    docker inspect --format='{{range .Config.Env}}{{println .}}{{end}}' my_container
    
  3. NetworkSettings: Сердце сетевой конфигурации. Содержит IP-адреса контейнера в каждой подключенной сети (Networks), информацию о сетевых шлюзах, MAC-адресах, а также список проброшенных портов (Ports). Необходима для диагностики сетевых проблем и подключения между сервисами.

    # Пример: получить IP-адрес контейнера в сети bridge
    docker inspect -f '{{.NetworkSettings.IPAddress}}' my_container
    
  4. Mounts: Полный список всех смонтированных в контейнер томов и bind-маунтов. Показывает тип (Type: volume, bind, tmpfs), источник на хосте (Source) и точку монтирования внутри контейнера (Destination). Помогает проверить корректность монтирования данных и конфигурационных файлов.

    "Mounts": [
        {
            "Type": "volume",
            "Name": "my_db_data",
            "Source": "/var/lib/docker/volumes/my_db_data/_data",
            "Destination": "/var/lib/postgresql/data",
            "Driver": "local",
            "Mode": "z",
            "RW": true
        }
    ]
    

Практическое применение и форматирование вывода

Сырой JSON часто слишком объёмен. Для эффективной работы используются флаги:

  • --format (или -f): Самый мощный инструмент. Позволяет извлекать только нужные данные с помощью шаблонов Go (Go templates). Это основа для автоматизации и скриптинга.

    # Получить только имя образа и статус контейнера
    docker inspect -f '{{.Config.Image}} -> {{.State.Status}}' my_container
    
    # Получить список всех портов в удобном виде
    docker inspect -f '{{range $p, $conf := .NetworkSettings.Ports}}{{$p}} -> {{(index $conf 0).HostPort}}{{"\n"}}{{end}}' my_container
    
  • --size (только для контейнеров): Показывает размер корневой файловой системы контейнера (RootFsSize) и размер изменений, записанных в слои R/W (VirtualSize). Полезно для анализа использования диска.

    docker inspect --size my_container
    

Пример рабочего процесса DevOps

Представьте ситуацию: контейнер не запускается, в логах лишь Exited (1).

  1. Проверяем статус и причину выхода:
    docker inspect -f '{{.State.Status}} (Exit: {{.State.ExitCode}}) {{.State.Error}}' problem_container
    
  2. Смотрим последнюю использованную команду (Cmd) и переменные окружения:
    docker inspect -f '{{.Config.Cmd}}' problem_container
    docker inspect -f '{{.Config.Env}}' problem_container
    
  3. Проверяем, корректно ли смонтированы необходимые тома или конфиги:
    docker inspect -f '{{json .Mounts}}' problem_container | jq .
    
  4. Анализируем настройки сети, если проблема в подключении:
    docker inspect -f '{{json .NetworkSettings.Networks}}' problem_container | jq .
    

Итог: docker inspect — это не просто команда для вывода информации, а основной инструмент диагностики и сбора метаданных в экосистеме Docker. Умение эффективно использовать её, особенно с флагом --format, является обязательным навыком для любого инженера, работающего с контейнерами. Она превращает "чёрный ящик" контейнера в полностью прозрачную и контролируемую сущность.

Что показывает docker inspect | PrepBro