Гид по технологиям

Сканирование образов Docker: инструкция по docker scan

7 min read Безопасность контейнеров Обновлено 18 Dec 2025
Сканирование образов Docker с docker scan
Сканирование образов Docker с docker scan

Иконка Docker

Быстрые ссылки

  • How Scans Work

  • Scanning an Image

  • More Advanced Scans

  • Customizing Scan Output

  • Limitations

  • Summary

Docker теперь поставляется с поддержкой встроенного сканирования безопасности. Вы можете локально просканировать свои контейнерные образы, чтобы выявить возможные уязвимости. Это ускоряет цикл разработки, давая более оперативную обратную связь по сравнению с CI-пайплайнами и облачными сервисами.

Команда

scan

доступна по умолчанию начиная с Docker версии 20.10. Docker сотрудничает с Snyk для интеграции сканирования в CLI. При первом запуске команды появится одноразовый запрос на согласие. Введите “y” и нажмите Enter, чтобы подтвердить интеграцию с Snyk.

Помимо согласия с Snyk, для сканирования контейнеров требуется вход в Docker Hub. Выполните

docker login

и укажите своё имя пользователя и пароль перед началом сканирования.

Вывод команды 'docker scan --version' в терминале

Попробуйте выполнить

docker scan --version

чтобы проверить установку. Вы увидите номер версии плагина

scan

и провайдера сканирования (в настоящее время Snyk). В будущем могут появиться дополнительные провайдеры.

Как работают сканы

docker scan принимает имя образа как параметр. Команда просканирует образ по базе данных уязвимостей Snyk. Покрывается широкий спектр проблем: от устаревших базовых образов до эксплойтов в open-source библиотеках, которые вы используете.

Snyk может указать строку Dockerfile, которая ввела уязвимость. Это даёт вам конкретную точку входа для исправления. Результаты отображаются прямо в терминале после завершения сканирования.

База данных Snyk постоянно обновляется. Не полагайтесь на единственный успешный результат — внешний мир и новые CVE меняют картину со временем. Регулярные сканы помогают поддерживать безопасность рабочих нагрузок.

Сканирование образа

Самый простой способ — передать тег образа в docker scan:

docker scan hello-world:latest

Сканирование может занять несколько секунд; большие образы потребуют больше времени. Результат появится в терминале. Пример успешного сканирования показан выше.

Вывод 'docker scan' с результатами и уязвимостями

Когда проблем нет, вывод может выглядеть успокаивающе. Однако реальная ценность команды проявляется при обнаружении уязвимостей: каждая запись содержит краткое описание, уровень серьёзности и ссылку на подробную информацию на сайте Snyk.

Более продвинутые сканы

docker scan обладает дополнительной функциональностью, доступной через флаги.

Самый полезный флаг — --file, который принимает путь к Dockerfile образа. Если вы передаёте Dockerfile, Snyk может выполнить более детальный анализ, используя инструкции внутри. Некоторые возможности сканирования, например обнаружение устаревшей базовой версии образа, доступны только при указании Dockerfile.

docker scan hello-world:latest --file Dockerfile

Это выдаст что-то вроде:

Tested 100 dependencies for known issues, found 50 issues.

Последняя строка укажет, является ли базовый образ — инструкция FROM в вашем Dockerfile — безопасным. Если базовый образ устарел или содержит решённые уязвимости, Snyk предложит альтернативные теги.

Иногда удобно игнорировать уязвимости в базовом образе, например если базовый образ содержит множество низкосерьёзных проблем и нет пути обновления. Для этого используйте флаг --exclude-base. Он исключит слой базового образа и поможет сосредоточиться на проблемах внутри ваших слоёв.

Важно: исключение базового образа снижает объём «шума», но может скрыть реальные риски. Применяйте --exclude-base только осознанно.

Настройка вывода сканирования

docker scan поддерживает несколько вариантов формата вывода. По умолчанию вывод ориентирован на людей и показывает список проблем в терминале.

Флаг --json заставляет команду вывести «сырые» JSON-данные, которые удобно обрабатывать в CI или внешних инструментах. Это полезно, если вы хотите автоматически парсить результаты и принимать решения на основе структурированных данных.

Вывод docker scan с включённым деревом зависимостей

Опция --dependency-tree выведет древовидное представление зависимостей образа над списком уязвимостей. Это помогает визуализировать, как пакеты попадают в образ, и найти корневые причины проблем.

Флаг --severity фильтрует уязвимости по уровню серьёзности: low, medium, high. Команда покажет только уязвимости с указанным уровнем или выше.

docker scan my-app:1.2.3 --severity high --json --file Dockerfile

Этот пример покажет только серьёзные проблемы в формате JSON с учётом Dockerfile.

Ограничения

На текущий момент docker scan не поддерживает дистрибутивы Alpine Linux. Кроме того, в плагине версии 0.7 есть серьёзная ошибка, из-за которой локальные сканы завершаются ошибкой «image not found». Версия v0.7 может сканировать только образы, доступные в Docker Hub или других публичных реестрах. Проблема исправлена в v0.8, но на Linux распостраняется v0.7.

Помимо технических ограничений, сервис Snyk накладывает жёсткие лимиты на использование docker scan. Без входа через Snyk вы получаете 10 бесплатных сканов в месяц; при входе через Snyk лимит увеличивается до 200 сканов в месяц.

Веб-интерфейс Snyk при аутентификации через Docker

Выполните docker scan --login, чтобы получить уникальный URL для входа. Скопируйте его в браузер и выполните шаги аутентификации. Можно войти через Docker Hub или несколько сторонних провайдеров. После входа в UI появится кнопка “Authenticate”; нажмите её, вернитесь в терминал и убедитесь, что появилось сообщение “Snyk is now ready to be used”.

Шпаргалка флагов (чек-лист команд)

  • --file — путь к Dockerfile для более детального анализа.
  • --exclude-base — исключает слои базового образа из проверки.
  • --json — выводит результат в JSON для автоматизированной обработки.
  • --dependency-tree — показывает древовидную структуру зависимостей.
  • --severity — фильтрует по уровню серьёзности.
  • --login — инициирует аутентификацию в Snyk через браузер.
  • --version — показывает версию плагина scan.

Чек-лист перед сканированием (роль-ориентированный)

Разработчик:

  • Убедиться, что локальный Dockerfile актуален.
  • Выполнить docker login в Docker Hub.
  • Запустить docker scan с --file для более точного результата.

DevOps инженер:

  • Проверить версию плагина: docker scan --version.
  • Планировать регулярные сканирования в CI для крон-проверок.
  • Автоматизировать оповещения при появлении high/critical уязвимостей.

Команда безопасности:

  • Настроить политики приёмки для допустимых уровней риска.
  • Поддерживать список исключений и документировать причины.
  • Контролировать использование --exclude-base.

Критерии приёмки

  • Сканы выполняются для всех сборок в CI не реже одного раза в сутки.
  • Уязвимости уровня high и critical создают тикет в системе отслеживания задач.
  • Для production-образов уровень severity не должен быть ниже medium без исключения, задокументированного в репозитории.
  • Документы с предложениями по обновлению базовых образов или зависимостей доступны команде разработки.

Когда сканирование дает ограниченную информацию (когда метод не работает)

  • Если образ построен на основе Alpine — docker scan может не поддерживать этот дистрибутив.
  • Если плагин scan старой версии (v0.7) и образ локальный — может возникнуть ошибка «image not found».
  • Если отсутствует Dockerfile, некоторые проверки, такие как устаревшая базовая версия, могут быть недоступны.
  • Если вы исчерпали лимиты Snyk, новые сканы могут быть заблокированы или ограничены.

Риски и меры смягчения

Риск: Пропуск уязвимостей в базовом образе при использовании --exclude-base.

  • Мера: Проводить независимые проверки базовых образов и план обновлений.

Риск: Ограничение по количеству сканов в Snyk.

  • Мера: Планировать сканирование критичных образов, использовать CI для контролируемого количества проверок, рассмотреть платный план Snyk для команды.

Риск: Неполный охват Alpine и некоторых пользовательских пакетов.

  • Мера: Использовать дополнительные инструменты сканирования, ориентированные на конкретные дистрибутивы, или применять системные обновления и hardening.

Мини-методология для интеграции в процесс разработки

  1. Локальная проверка: разработчик запускает docker scan --file Dockerfile перед PR.
  2. Проверка в CI: при каждом PR запускать docker scan --json и парсить результат для автоматического создания комментариев/тикетов.
  3. Принятие решений: для high/critical блокировать слияние до устранения, для medium — фиксировать план исправления.
  4. Мониторинг: повторять полные сканы еженедельно для образов в продакшене.

Краткое руководство по устранению уязвимостей

  • Проверить, какая строка Dockerfile указана Snyk как источник уязвимости.
  • Обновить зависимость или базовый образ до рекомендованного тега.
  • Пересобрать образ локально и повторно просканировать.
  • Если обновление невозможно, задокументировать причину и смягчить риск (ограничения привилегий, runtime hardening).

Короткий глоссарий

  • Dockerfile — файл с инструкциями для сборки образа Docker.
  • Base image — базовый образ, указанный в FROM.
  • Dependency tree — древовидная модель зависимостей пакетов в образе.
  • Snyk — провайдер базы данных уязвимостей, интегрированный с docker scan.

Примеры использования и шаблоны

Скрипт для CI (bash) — пример автоматического парсинга JSON и создания ошибки при серьёзных уязвимостях:

#!/bin/bash
set -e
OUTPUT=$(docker scan my-app:ci --file Dockerfile --json)
# Пример парсинга: если в JSON есть issues с severity="high" — завершить с ошибкой
if echo "$OUTPUT" | jq '.vulnerabilities[] | select(.severity=="high")' | grep -q .; then
  echo "Found high severity vulnerabilities. Failing build."
  exit 1
fi

(Сохраните этот шаблон как часть CI-конфигурации и адаптируйте под ваш пайплайн.)

Сводка

Встроенная команда docker scan упрощает обнаружение уязвимостей в контейнерных образах и даёт разработчикам быстрый feedback. Для максимально точных результатов указывайте Dockerfile, используйте --dependency-tree для понимания причин и --json для автоматизации. Не забывайте про ограничения: Alpine поддерживается частично, а старые версии плагина могут давать ошибки. Планируйте регулярные сканы и интегрируйте их в CI, чтобы поддерживать надёжную безопасность контейнеров.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Как навсегда удалить канал YouTube
Руководство

Как навсегда удалить канал YouTube

Оптимизация Diablo Immortal на мобильных
Гайды

Оптимизация Diablo Immortal на мобильных

Переместить резервную копию iPhone на внешний диск
Инструкции

Переместить резервную копию iPhone на внешний диск

Шифрование резервных копий iPhone и iPad
Безопасность

Шифрование резервных копий iPhone и iPad

Символическая ссылка: что это и как создать
Системное администрирование

Символическая ссылка: что это и как создать

AWS CloudWatch: мониторинг, дашборды и алерты
Cloud DevOps

AWS CloudWatch: мониторинг, дашборды и алерты