2015-06-04 3 views
11

Хотите перечислить все каталоги контейнеров, которые являются установленными томами.Как перечислить объемы, установленные на докере из контейнера

т.е., чтобы иметь возможность получить подобную информацию я получаю от

docker inspect --format "{{ .Volumes }}" <self> 

Но внутри контейнера и без docker установлен там.

Я пробовал cat /proc/mounts, но не могу найти подходящий фильтр для этого.

+0

попытка добавить к вашему 'Докер перспективе command' привязка монтирования из' -v /var/run/docker.sock:/вар/запустить/docker.sock' – user2915097

+0

я имею в виду, не устанавливая докер внутри и без запуска внутри, потому что это эквивалент предоставления привилегий sudo внутреннему контейнеру внешнему хосту. –

+2

Внутри контейнера действительно нет никакого способа определить опоры тонера Docker (без доступа к Docker api). – larsks

ответ

1

Если докер хозяин OSX, смонтированные тома будут мной Тип osxfs (или fuse.osxfs). Вы можете запустить

mount | grep osxfs | awk '{print $3}'

и получить список всех установленных томов.

Если ваш хост-докер является Linux (по крайней мере, Ubuntu 14+, может быть, другие), то все тома будут включены/dev, но не на устройстве, находящемся в файловой системе/dev вашего контейнера. Объемы будут рядом с /etc/resolv.conf,/etc/hostname и/etc/hosts. Если вы запустите mount | grep ^/dev, затем отфильтруйте любой из файлов в ls /dev/*, а затем отфильтруйте три файла, перечисленные выше, вы должны остаться с томами хоста.

mount | grep ^/dev/ | grep -v /etc | awk '{print $3}'

Моя догадка специфика может отличаться от Linux для Linux. Не идеально, но, по крайней мере, можно выяснить.

+0

Работает с мой хост Ubuntu и гость. Это то, что мне нужно. Благодаря! –

0

Как вы можете прочитать из многих комментариев, которые у вас были, контейнер изначально представляет собой только ограниченную зарезервированную часть ресурсов, полностью удаленную от остальной части вашей машины. Он не знает, что является докером, и внутри контейнера все ведет себя так, как будто это отдельная машина. Похоже на матрицу, я думаю;) Вы получаете доступ к ядру хоста и его ресурсам, но все же снова ограничены только как отфильтрованный набор. Это делается с помощью замечательной функциональности «cgroups», которая поставляется с ядрами Unix/Linux.

Теперь хорошие новости: есть несколько способов предоставить информацию вашему докеру, но это то, что вам нужно будет предоставить и построить самостоятельно.

Самый простой способ - подключить гнездо unix, расположенное на вашем хосте, в /var/run/docker.sock к внутренней части вашего контейнера в том же месте. Таким образом, когда вы используете клиент-докер в своем контейнере, вы напрямую разговариваете с механизмом докеров на своем хосте. Однако с большой силой приходит большая ответственность. Это хорошая настройка, но она не очень безопасна. Как только кому-то удастся попасть в ваш докер, он имеет корневой доступ к вашей хост-системе таким образом.

Лучшим способом было бы предоставить список монтировок через настройки среды или цепляться за некоторые составленные соглашения, чтобы иметь возможность предсказать монтировки.

(вы понимаете, что есть параметр для установки, чтобы дать монтирует псевдоним внутри докер ли?)

0

Возможно, команда docker exec является то, что вы ищете.

Это позволит вам запускать произвольные команды внутри существующего контейнера.

Например:

docker exec -it <mycontainer> bash 

Конечно, все, что команда вы работаете, должны существовать в контейнере файловой системы.

#docker cp >>>> Copy files/folders between a container and the local filesystem 
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH 
docker cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH 

скопировать полную папку:

docker cp ./src/build b081dbbb679b:/usr/share/nginx/html 

Примечание - Это будет копировать каталог для сборки в контейнер в .../Nginx/html/директории для копирования только файлы присутствуют в папке:

docker cp ./src/build/ b081dbbb679b:/usr/share/nginx/html 

Примечание. Это скопирует содержимое каталога сборки в контейнере …./nginx/html/ directory

D ocker Варианты хранения:

Объемы хранятся в части файловой системы хоста, которой управляет Docker (/ var/lib/docker/volume/on Linux). Процессы Non-Docker не должны изменять эту часть файловой системы. Объемы - лучший способ сохранить данные в Docker.

При создании тома он сохраняется в каталоге на хосте Docker. Когда вы монтируете том в контейнер, этот каталог монтируется в контейнер. Это похоже на способ привязки монтирования, за исключением того, что тома управляются Docker и изолированы от основных функций хост-машины.

Данная громкость может быть установлена ​​одновременно в несколько контейнеров. Если ни один из запущенных контейнеров не использует том, этот том по-прежнему доступен для Docker и не удаляется автоматически. Вы можете удалить неиспользуемые тома с помощью чернослива докеры.

Когда вы монтируете том, его можно назвать или анонимным. Анонимным томам не дается явное имя, когда они сначала монтируются в контейнер, поэтому Docker дает им случайное имя, которое гарантировано будет уникальным в пределах данного узла Docker. Помимо имени, имена и анонимные тома ведут себя одинаково.

Объемы также поддерживают использование драйверов томов, которые позволяют хранить ваши данные на удаленных хостах или облачных провайдерах, среди других возможностей.

Удлинители крепления могут храниться в любом месте на хост-системе. Они могут даже быть важными системными файлами или каталогами. Процессы без докеров на хосте Docker или контейнере Docker могут изменять их в любое время. Доступен с первых дней Докера. Удерживающие устройства имеют ограниченную функциональность по сравнению с томами. Когда вы используете привязку монтирования, файл или каталог на главной машине монтируется в контейнер. На файл или каталог ссылается его полный путь на главной машине. Файл или каталог уже не должен существовать на хосте Docker. Он создается по требованию, если он еще не существует. Bind mounts очень эффективны, но они полагаются на файловую систему хост-машины, имеющую определенную структуру каталогов. Если вы разрабатываете новые приложения Docker, подумайте об использовании именованных томов. Вы не можете использовать команды Docker CLI для непосредственного управления привязками привязок.

Одним из побочных эффектов использования привязок, к лучшему или, что еще хуже, является то, что вы можете изменить файловую систему хоста через процессы, запущенные в контейнере, включая создание, изменение или удаление важных системных файлов или каталогов. Это мощная способность, которая может иметь последствия для безопасности, включая воздействие на процессы не-Docker на хост-системе.

tmpfs mounts хранятся только в памяти хост-системы и никогда не записываются в файловую систему хост-системы.

Крепление tmpfs не сохраняется на диске либо на хосте Docker, либо внутри контейнера. Он может использоваться контейнером в течение всего срока службы контейнера, чтобы хранить непостоянное состояние или конфиденциальную информацию. Например, внутренние службы роуминга используют монтирования tmpfs для монтирования секретов в контейнеры службы.

Если вам нужно указать параметры драйвера громкости, вы должны использовать --mount. -v или --volume: Состоит из трех полей, разделенных символами двоеточия (:). Поля должны быть в правильном порядке, и значение каждого поля не сразу становится очевидным. o В случае именованных томов первое поле является именем тома и уникально на данном хост-компьютере. Для анонимных томов первое поле опущено. o Второе поле - это путь, в котором файл или каталог будет установлен в контейнере. o Третье поле является необязательным и представляет собой список опций, разделенных запятыми, например ro. Эти параметры обсуждаются ниже. • --mount: Состоит из нескольких пар ключ-значение, разделенных запятыми и каждый из которых состоит из кортежа =. Синтаксис -mount является более подробным, чем -v или -volume, но порядок ключей незначителен, а значение флага легче понять. o Тип монтирования, который может быть связан, томом или tmpfs. В этом разделе обсуждаются тома, поэтому тип всегда будет томом. o Источник крепления. Для названных томов это имя тома. Для анонимных томов это поле опущено. Может указываться как источник или src. o Назначение принимает в качестве значения путь, в котором файл или каталог будет установлен в контейнере. Может указываться как цель, dst или цель. o Опция readonly, если она есть, заставляет монтировку привязки монтировать в контейнер как доступную только для чтения. o Опция volume-opt, которая может быть указана более одного раза, принимает пару ключ-значение, состоящую из имени опции и ее значения.