Что показывает docker inspect
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Команда 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-объект. Вот наиболее важные и часто используемые секции:
-
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" } -
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 -
NetworkSettings: Сердце сетевой конфигурации. Содержит IP-адреса контейнера в каждой подключенной сети (Networks), информацию о сетевых шлюзах, MAC-адресах, а также список проброшенных портов (Ports). Необходима для диагностики сетевых проблем и подключения между сервисами.# Пример: получить IP-адрес контейнера в сети bridge docker inspect -f '{{.NetworkSettings.IPAddress}}' my_container -
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).
- Проверяем статус и причину выхода:
docker inspect -f '{{.State.Status}} (Exit: {{.State.ExitCode}}) {{.State.Error}}' problem_container - Смотрим последнюю использованную команду (
Cmd) и переменные окружения:docker inspect -f '{{.Config.Cmd}}' problem_container docker inspect -f '{{.Config.Env}}' problem_container - Проверяем, корректно ли смонтированы необходимые тома или конфиги:
docker inspect -f '{{json .Mounts}}' problem_container | jq . - Анализируем настройки сети, если проблема в подключении:
docker inspect -f '{{json .NetworkSettings.Networks}}' problem_container | jq .
Итог: docker inspect — это не просто команда для вывода информации, а основной инструмент диагностики и сбора метаданных в экосистеме Docker. Умение эффективно использовать её, особенно с флагом --format, является обязательным навыком для любого инженера, работающего с контейнерами. Она превращает "чёрный ящик" контейнера в полностью прозрачную и контролируемую сущность.