Как увидеть содержимое докерного изображения

Я сделал тянуть докер и могу перечислить изображение, которое загрузили. Я хочу увидеть содержимое этого изображения. Сделал поиск в сети, но нет прямого ответа.

Ответ 1

Вы можете просто запустить интерактивный контейнер оболочки, используя это изображение, и исследовать любой контент, который имеет это изображение.

Например:

docker run -it image_name sh

Или, если вы хотите увидеть, как был создан образ, то есть шаги в его Dockerfile, вы можете:

docker image history --no-trunc image_name > image_history

Шаги будут image_history файл image_history.

Для изображений с настроенной entrypoint вы можете запустить docker run -it --entrypoint sh image_name чтобы переопределить его (рекомендуется в комментариях).

Ответ 2

Принятый ответ здесь проблематичен, потому что нет гарантии, что изображение будет иметь какую-либо интерактивную оболочку. Например, изображение дрона/дрона содержится в одной команде /drone ENTRYPOINT а также имеет ENTRYPOINT, поэтому это не удастся:

$ docker run -it drone/drone sh
FATA[0000] DRONE_HOST is not properly configured        

И это не удастся

$ docker run --rm -it --entrypoint sh drone/drone
docker: Error response from daemon: oci runtime error: container_linux.go:247: starting container process caused "exec: \"sh\": executable file not found in $PATH".

Это не редкая конфигурация; многие минимальные изображения содержат только двоичные файлы, необходимые для поддержки целевого сервиса. К счастью, существуют механизмы для изучения файловой системы изображения, которые не зависят от содержимого изображения. Самой простой, вероятно, является команда docker export, которая экспортирует файловую систему контейнера в виде архива tar. Итак, запустите контейнер (не важно, выйдет он из строя или нет):

$ docker run -it drone/drone sh
FATA[0000] DRONE_HOST is not properly configured        

Затем используйте docker export для экспорта файловой системы в tar:

$ docker export $(docker ps -lq) | tar tf -

docker ps -lq там означает "дай мне идентификатор самого последнего контейнера докера". Вы можете заменить это явным именем контейнера или идентификатором.

Ответ 3

Вы не должны запускать контейнер только для просмотра содержимого изображения. Например, вы можете искать вредоносный контент, а не запускать его. Используйте "создать" вместо "запустить";

docker create --name="tmp_$$" image:tag
docker export tmp_$$ | tar t
docker rm tmp_$$

Ответ 4

docker save nginx > nginx.tar
tar -xvf nginx.tar

Следующие файлы присутствуют:

  • manifest.json - описывает слои файловой системы и имя файла json, который имеет свойства контейнера.
  • .json - Свойства контейнера
  • - Каждый каталог layerid содержит файл json, описывающий свойство слоя и файловую систему, связанную с этим слоем. Docker хранит изображения-контейнеры в виде слоев, чтобы оптимизировать пространство хранения за счет повторного использования слоев в изображениях.

https://sreeninet.wordpress.com/2016/06/11/looking-inside-container-images/

ИЛИ ЖЕ

Вы можете использовать погружение для интерактивного просмотра содержимого изображения с помощью TUI.

enter image description here

https://github.com/wagoodman/dive

Ответ 5

Чтобы просмотреть подробный контент изображения, вы должны запустить docker run --rm image/name ls -alR где --rm означает удаление, как только выход из контейнера.

enter image description here

Ответ 6

Мы можем попробовать более простой способ:

docker image inspect image_id

Это работало в версии Docker:

DockerVersion": "18.05.0-ce"

Ответ 7

С помощью Docker EE для Windows (17.06.2-ee-6 на Hyper-V Server 2016) все содержимое контейнеров Windows можно C:\ProgramData\docker\windowsfilter\ адресу C:\ProgramData\docker\windowsfilter\ path операционной системы хоста.

Не требуется специальный монтаж.

Префикс папки можно найти по идентификатору контейнера из вывода docker ps -a.

Ответ 8

Существует бесплатный инструмент с открытым исходным кодом, называемый Anchore, который вы можете использовать для сканирования изображений контейнера. Эта команда позволит вам перечислить все файлы в изображении контейнера

содержание изображения anchore-cli myrepo/app: последние файлы

https://anchore.com/opensource/

Ответ 9

ИЗУЧЕНИЕ ИЗОБРАЖЕНИЯ DOCKER!

  1. Выясните, что за оболочка там bash или sh или...

    Сначала осмотрите изображение: docker inspect name-of-container-or-image

    Ищите entrypoint или cmd в возвращении json.

  2. Затем сделайте: docker run --rm -it --entrypoint=/bin/bash name-of-image

    попав внутрь, выполните: ls -lsa или любую другую команду оболочки, например: cd ..

    -it обозначает интерактивный... и tty. --rm обозначает удаление контейнера после запуска.

Ответ 10

Докер все еще находится в разработке. Последний раз, когда я проверил его, эта функция не была включена как часть инструментов командной строки.

Однако вы можете попробовать проверить докеры на изображении. Вы увидите раздел под названием Data в GraphDriver. Здесь у вас есть пути, такие как UpperDir, которые вы можете запустить найти.

Это может не работать со всеми драйверами хранилища для докеров.