Я сделал тянуть докер и могу перечислить изображение, которое загрузили. Я хочу увидеть содержимое этого изображения. Сделал поиск в сети, но нет прямого ответа.
Как увидеть содержимое докерного изображения
Ответ 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.
Ответ 5
Чтобы просмотреть подробный контент изображения, вы должны запустить docker run --rm image/name ls -alR
где --rm
означает удаление, как только выход из контейнера.
Ответ 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: последние файлы
Ответ 9
ИЗУЧЕНИЕ ИЗОБРАЖЕНИЯ DOCKER!
Выясните, что за оболочка там
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
обозначает интерактивный... и tty.--rm
обозначает удаление контейнера после запуска.
Ответ 10
Докер все еще находится в разработке. Последний раз, когда я проверил его, эта функция не была включена как часть инструментов командной строки.
Однако вы можете попробовать проверить докеры на изображении. Вы увидите раздел под названием Data в GraphDriver. Здесь у вас есть пути, такие как UpperDir, которые вы можете запустить найти.
Это может не работать со всеми драйверами хранилища для докеров.