Я зробив докер і можу перелічити завантажене зображення. Я хочу побачити вміст цього зображення. Шукали в мережі, але прямої відповіді немає.
Я зробив докер і можу перелічити завантажене зображення. Я хочу побачити вміст цього зображення. Шукали в мережі, але прямої відповіді немає.
Відповіді:
Ви можете просто запустити інтерактивний контейнер оболонки, використовуючи це зображення, та вивчити будь-який вміст цього зображення.
Наприклад:
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
Там означає «дати мені ідентифікатор самого останнього контейнера Докер». Ви можете замінити це явним іменем контейнера або ідентифікатором.
Не слід запускати контейнер лише для того, щоб побачити вміст зображення. Наприклад, ви можете шукати шкідливий вміст, а не запускати його. Використовуйте "create" замість "run";
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: останні файли