Я сделал вытягивание докера и могу перечислить загруженный образ. Я хочу увидеть содержимое этого изображения. Сделал поиск в сети, но нет прямого ответа.
Не дурак. Просмотр контейнера и изображения - это не одно и то же. Возможно, вы захотите просмотреть исходную файловую систему или даже проверить, что в образе нет ничего вредоносного, прежде чем он сможет запустить.
Кейларон
4
Если вы не можете запустить изображение как контейнер, вы можете использовать инструмент, такой как диск ( github.com/wagoodman/dive ), или вы можете использовать docker save для экспорта изображения в виде tar-файла. Затем вы можете исследовать смолу или с помощью погружения как можно скорее исследовать изображение.
Спасибо. Первый - это то, что я ищу. В основном исследуйте папки.
pylearn
9
Я пытаюсь увидеть содержимое изображения, созданного с помощью «ОТ нуля», и нет доступной оболочки. Есть ли другой способ увидеть содержимое? Изображение, которое я пытаюсь увидеть, - это portainer / portainer.
Хуан Эрнандес
2
Возможно ли, что кто-то видит содержимое изображения, не порождая контейнер? Или мы можем предположить, что это безопасно от всех, если у них нет прав порождать из него контейнер?
Shabirmean
3
объединение сказанного ранее «для контейнера Windows с точкой входа»: docker run -it --entrypoint cmd <image_name>будет работать.
Принятый ответ здесь проблематичен, потому что нет гарантии, что изображение будет иметь какую-либо интерактивную оболочку. Например, образ дрон / дрон содержится в одной команде /drone, и он также имеет 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есть «дай мне идентификатор самого последнего контейнера докера». Вы можете заменить это явным именем контейнера или идентификатором.
этот ответ очень полезен, чтобы выяснить, что может быть внутри контейнера в данный момент времени
Жуан Андраде
2
Этот ответ является более правильным и работает для меня, так как я хочу исследовать содержимое изображения с использованием чужой архитектуры и не могу его «просто запустить»
Владимир Перевалов
97
Вы не должны запускать контейнер только для просмотра содержимого изображения. Например, вы можете искать вредоносный контент, а не запускать его. Используйте «создать» вместо «запустить»;
docker create --name="tmp_$$" image:tag
docker export tmp_$$ | tar t
docker rm tmp_$$
2-я строка выше просто перечисляет содержимое файловой системы. Если вы хотите получить все файлы в виде tar, вы можете заменить их чем-то вроде docker export tmp_$$ > image-fs.tar.
Пино
Какой будет вторая строка для ОС Windows? Не docker export tmp_$$ | tar tбудет работать.
Алексей Мариниченко
@ Алексей Мариниченко tarможет быть не установлен на вашем компьютере. Попробуйте tar --helpпроверить это.
Абдуррахман И.
1
Это также работает, если в контейнере нет оболочки
Петр Дотчев,
3
@AlexeiMarinichenko Вы можете использовать -oпараметр, чтобы указать файл для записи. Например docker export -o c:\temp\tmp_$$.tar tmp_$$.
GiddyUpHorsey
63
docker save nginx > nginx.tar
tar -xvf nginx.tar
Следующие файлы присутствуют:
manifest.json - описывает слои файловой системы и имя файла json со свойствами контейнера.
.json - Свойства контейнера
- Каждый каталог «layerid» содержит файл json с описанием свойств слоя и файловой системы, связанной с этим слоем. Docker хранит изображения-контейнеры в виде слоев, чтобы оптимизировать пространство хранения за счет повторного использования слоев в изображениях.
Это кажется мне наиболее полезным ответом, так как вам не нужно запускать контейнер для получения файлов.
Алек Томас
1
Абсолютно согласен с @AlecThomas - и чтобы сделать еще один шаг вперед, почему мне даже нужно dockerпросто посмотреть содержимое архивного файла другого типа.
Эд Рэндалл
хороший ответ, я бы также указал тег: docker save --output nginx.tar nginx:latestиначе, согласно документу, он будет содержать «все родительские слои и все теги + версии»
Тарек
Это должно быть поддержано, так как это, вероятно, единственный способ исследовать внутренности, если у вас нет какой-либо утилиты Unix внутри. Также этот способ не требует создания контейнера.
Станислав Герман-Евтушенко
9
Чтобы просмотреть подробный контент изображения, вы должны запустить, docker run --rm image/name ls -alRгде --rmозначает удалить, как только выходы из контейнера.
Проблема с этим ответом состоит в том, что, как обсуждалось в принятом ответе, нет никакой гарантии, что ваше изображение содержит какую-либо оболочку. Или ls. Или вообще какие-то общие инструменты.
Жаворонки
3
Мы можем попробовать более простой вариант следующим образом:
Это не показывает содержимое ; это только показывает слои и т. д., которые вошли в создание изображения.
Роджер Липскомб
0
С помощью Docker EE для Windows (17.06.2-ee-6 на Hyper-V Server 2016) все содержимое контейнеров Windows можно просмотреть на C:\ProgramData\docker\windowsfilter\ пути к операционной системе хоста.
Никакого специального монтажа не требуется.
Префикс папки можно найти по идентификатору контейнера из docker ps -aвывода.
Существует бесплатный инструмент с открытым исходным кодом, называемый Anchore, который вы можете использовать для сканирования изображений контейнера. Эта команда позволит вам перечислить все файлы в образе контейнера
содержание изображения anchore-cli myrepo / app: последние файлы
Ответы:
Вы можете просто запустить интерактивный контейнер оболочки, используя это изображение, и исследовать любой контент, который имеет это изображение.
Например:
Или следите за изображениями с
entrypoint
Или, если вы хотите увидеть, как было построено изображение, то есть шаги по его созданию
Dockerfile
, вы можете:Шаги будут записаны в
image_history
файл.источник
docker run -it --entrypoint cmd <image_name>
будет работать.Принятый ответ здесь проблематичен, потому что нет гарантии, что изображение будет иметь какую-либо интерактивную оболочку. Например, образ дрон / дрон содержится в одной команде
/drone
, и он также имеетENTRYPOINT
, так что это не удастся:И это не удастся
Это не редкая конфигурация; многие минимальные изображения содержат только двоичные файлы, необходимые для поддержки целевого сервиса. К счастью, существуют механизмы для изучения файловой системы изображения, которые не зависят от содержимого изображения. Самой простой, вероятно, является
docker export
команда, которая экспортирует файловую систему контейнера в виде архива tar. Итак, запустите контейнер (не важно, выйдет он из строя или нет):Затем используйте
docker export
для экспорта файловой системы вtar
:Там
docker ps -lq
есть «дай мне идентификатор самого последнего контейнера докера». Вы можете заменить это явным именем контейнера или идентификатором.источник
Вы не должны запускать контейнер только для просмотра содержимого изображения. Например, вы можете искать вредоносный контент, а не запускать его. Используйте «создать» вместо «запустить»;
источник
docker export tmp_$$ > image-fs.tar
.docker export tmp_$$ | tar t
будет работать.tar
может быть не установлен на вашем компьютере. Попробуйтеtar --help
проверить это.-o
параметр, чтобы указать файл для записи. Напримерdocker export -o c:\temp\tmp_$$.tar tmp_$$
.Следующие файлы присутствуют:
https://sreeninet.wordpress.com/2016/06/11/looking-inside-container-images/
ИЛИ
Вы можете использовать погружение для интерактивного просмотра содержимого изображения с помощью TUI.
https://github.com/wagoodman/dive
источник
docker
просто посмотреть содержимое архивного файла другого типа.docker save --output nginx.tar nginx:latest
иначе, согласно документу, он будет содержать «все родительские слои и все теги + версии»Чтобы просмотреть подробный контент изображения, вы должны запустить,
docker run --rm image/name ls -alR
где--rm
означает удалить, как только выходы из контейнера.источник
ls
доступно и вPATH
ИЗУЧЕНИЕ ДОКЕРА ИЗОБРАЖЕНИЯ !
Выясните, что за оболочка там
bash
илиsh
или ...Сначала проверьте изображение:
docker inspect name-of-container-or-image
Ищите
entrypoint
илиcmd
в возвращении JSON.Затем сделайте:
docker run --rm -it --entrypoint=/bin/bash name-of-image
когда-то внутри сделайте:
ls -lsa
или любую другую команду оболочки как:cd ..
-it
Означает интерактивный ... и терминал.--rm
означает удалить контейнер после запуска.источник
ls
. Или вообще какие-то общие инструменты.Мы можем попробовать более простой вариант следующим образом:
Это работало в версии Docker:
источник
С помощью Docker EE для Windows (17.06.2-ee-6 на Hyper-V Server 2016) все содержимое контейнеров Windows можно просмотреть на
C:\ProgramData\docker\windowsfilter\
пути к операционной системе хоста.Никакого специального монтажа не требуется.
Префикс папки можно найти по идентификатору контейнера из
docker ps -a
вывода.источник
Существует бесплатный инструмент с открытым исходным кодом, называемый Anchore, который вы можете использовать для сканирования изображений контейнера. Эта команда позволит вам перечислить все файлы в образе контейнера
содержание изображения anchore-cli myrepo / app: последние файлы
https://anchore.com/opensource/
источник