Я хотел бы извлечь файл из образа Docker без необходимости запуска образа.
Эта docker save
опция в настоящее время не является жизнеспособной для меня, поскольку она сохраняет слишком большой файл только для того, чтобы распаковать конкретный файл.
Ответы:
Вы можете извлечь файлы из изображения с помощью следующих команд:
Согласно
docker create
документации , контейнер не запускается:Для справки (мой предыдущий ответ), менее эффективный способ извлечения файла из изображения следующий:
источник
docker run --entrypoint /bin/sh my_image -c /bin/cat some_file
Ничто из вышеперечисленного не помогло мне. Полная рабочая команда:
docker run --rm --entrypoint /bin/sh image_name -c "cat /path/filename" > output_filename
Без кавычек
cat
передается без имени файла, поэтому он не знает, что показать. Также рекомендуется удалить контейнер после завершения команды.источник
Если я не ошибаюсь, я считаю, что Docker-контейнеры хранят кэшированные файлы, созданные в следующей директории для Ubuntu:
/var/lib/docker/aufs/diff/<container_id>
Оттуда вы сможете получить доступ к файловой системе и получить ваши файлы.
источник
layersize
иjson
, и также не читается пользователем (даже если пользователь находится в группе Docker)./var/lib/docker/aufs/diff
будет содержать файл, который я ищу (но классифицируется не по идентификатору контейнера) и также не читается./var/lib/docker/aufs
(но не ко всем другим каталогам/var/lib/docker/
)Если сохранение полного вывода
docker save
не является вариантом, вы можете использовать конвейеры, чтобы извлечь из него только необходимый файл.К сожалению, поскольку вывод представляет собой «tar of tars», это может быть слегка итеративный процесс.
Когда мне нужно было извлечь файл, я сделал следующее:
1) Определите, какую версию изображения интересующий вас файл изменил в последнее время (как вы это делаете, вероятно, зависит от вашего изображения), а также дату, когда он был создан / сохранен
2) Получить полное оглавление из вывода
docker save
команды с помощью:3) Уточните
layer.tar
файл (ы) в выходных данных этой команды, которые соответствуют дате изображения, которое вы определили на шаге 1. (Вы можете добавить,| grep layer.tar
чтобы просто показать эти файлы)4) Извлеките этот
layer.tar
файл в стандартный формат и получите его содержание:5) Убедитесь, что нужный файл указан в списке, и извлеките его, как только найдете имя:
Если существует несколько
layer.tar
файлов, соответствующих дате, которую вы ищете на шаге 2/3, вам может потребоваться повторить шаг 4 для каждого из них, пока вы не найдете правильныйЗамените текст заглавными буквами в приведенных выше командах на правильные имена изображений, контрольные суммы и имена файлов для вашего случая.
источник