Я хочу иметь возможность проверять содержимое контейнера Docker (только для чтения). Элегантный способ сделать это - смонтировать содержимое контейнера в каталоге. Я говорю о монтировании содержимого контейнера на хосте, а не о монтировании папки на хосте внутри контейнера.
Я вижу, что сейчас в Docker есть два драйвера хранилища: aufs и btrfs. Моя собственная установка Docker использует btrfs, и просмотр / var / lib / docker / btrfs / subvolumes показывает мне один каталог на контейнер Docker в системе. Это, однако, деталь реализации Docker, и кажется неправильным монтировать - связывать эти каталоги где-то еще.
Есть ли правильный способ сделать это, или мне нужно установить патч Docker для поддержки таких видов монтирования?
linux
filesystems
lxc
docker
dflemstr
источник
источник
Ответы:
Посмотрите на
docker export
.Чтобы быстро вывести список файлов в вашем контейнере:
Экспортировать:
Или посмотреть файл:
Docker 1.8 поддерживает cp :
https://docs.docker.com/reference/commandline/cp/
обновление: вы должны ssh на ваш докер при запуске этого.
источник
tar x PATH-IN-CONTAINER
, она будет извлекать только те файлы, которые вам нужны.tar
архив все еще создается в демоне Docker, и для его создания требуется несколько минут ...docker export ubuntu|tar -t|grep etc/network
у меня 3 секунды.ubuntu
изображение действительно маленькое ...Вы можете использовать docker commit для сохранения текущего состояния вашего контейнера в новом изображении и запуска интерактивного контейнера из этого изображения для проверки содержимого.
Из документации:
Надеюсь это поможет.
источник
Вы можете использовать nsenter для запуска вашей программы проверки (которая, вероятно, уже должна быть включена в контейнер) внутри контейнера / пространства имен. Но чтобы смонтировать контейнерную файловую систему, как видно внутри нее, вы должны смонтировать исходный образ и все слои, если это aufs, или эквивалентное действие для используемого устройства отображения, btrfs и других (будущих) механизмов хранения, различающихся в каждом случае. Вероятно, было бы более эффективно, чтобы docker выполнил всю работу за вас, именно так, как и предполагалось, и использовал nsenter для проверки внутри контейнера.
Есть и другие подходы. Docker diff покажет, какие файлы изменились в этом контейнере, если вы хотите увидеть, что изменилось вместо того, что было в исходном изображении.
А для данных, которые должны быть постоянными и проверяемыми, возможно, лучшим вариантом было бы иметь их в томе в контейнере и монтировать их в реальной файловой системе, или в контейнере с чистыми данными, или в том же контейнере, но что вы можете запустить другой контейнер с программой проверки, монтирующей эти тома из него.
источник
РЕДАКТИРОВАТЬ: я попробовал решение ниже, и, к сожалению, оно не работает для меня на практике. Смонтированная файловая система не точно отражала файловую систему контейнера (даже с
cache=no
). Я не уверен, является ли это фундаментальной проблемой, или я делаю что-то не так.Вы можете установить sshd в образе docker и использовать
docker exec
для запуска службы ssh (/usr/sbin/sshd -D
) в контейнере docker (обратите внимание, что SSH-порт 22 контейнера docker должен быть открыт).Затем используйте,
docker cp
чтобы скопировать ваш открытый ключ ssh в/root/.ssh/authorized_keys
каталог контейнера Docker.Наконец, используйте,
docker inspect
чтобы найти IP-адрес контейнера и смонтировать файловую систему контейнера, используяВы должны написать сценарий, чтобы на практике это было удобно.
источник