Я сделал вытягивание докера и могу перечислить загруженный образ. Я хочу увидеть содержимое этого изображения. Сделал поиск в сети, но нет прямого ответа.
Я сделал вытягивание докера и могу перечислить загруженный образ. Я хочу увидеть содержимое этого изображения. Сделал поиск в сети, но нет прямого ответа.
Ответы:
Вы можете просто запустить интерактивный контейнер оболочки, используя это изображение, и исследовать любой контент, который имеет это изображение.
Например:
docker run -it image_name sh
Или следите за изображениями с entrypoint
docker run -it --entrypoint sh image_name
Или, если вы хотите увидеть, как было построено изображение, то есть шаги по его созданию Dockerfile
, вы можете:
docker image history --no-trunc image_name > image_history
Шаги будут записаны в image_history
файл.
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
есть «дай мне идентификатор самого последнего контейнера докера». Вы можете заменить это явным именем контейнера или идентификатором.
Вы не должны запускать контейнер только для просмотра содержимого изображения. Например, вы можете искать вредоносный контент, а не запускать его. Используйте «создать» вместо «запустить»;
docker create --name="tmp_$$" image:tag
docker export tmp_$$ | tar t
docker rm tmp_$$
docker export tmp_$$ > image-fs.tar
.
docker export tmp_$$ | tar t
будет работать.
tar
может быть не установлен на вашем компьютере. Попробуйте tar --help
проверить это.
-o
параметр, чтобы указать файл для записи. Например docker export -o c:\temp\tmp_$$.tar tmp_$$
.
docker save nginx > nginx.tar
tar -xvf nginx.tar
Следующие файлы присутствуют:
https://sreeninet.wordpress.com/2016/06/11/looking-inside-container-images/
ИЛИ
Вы можете использовать погружение для интерактивного просмотра содержимого изображения с помощью TUI.
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 image inspect image_id
Это работало в версии Docker:
DockerVersion": "18.05.0-ce"
С помощью 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: последние файлы