При использовании образов докеров из реестров мне часто нужно видеть тома, созданные контейнерами образа.
Примечание: я использую докер версии 1.3.2 в Red Hat 7.
пример
postgres
Официальное изображение из Докер реестра имеет объем , настроенный для контейнеров в /var/lib/postgresql/data
.
Какая самая короткая команда для отображения объема /var/lib/postgresql/data
в postgres
контейнере?
Ответы:
Используйте
docker ps
для получения идентификатора контейнера.затем
docker inspect -f '{{ .Mounts }}' containerid
Пример:
Терминал 1
терминал 2
Выход
очевидно, из-за использования языка Go для реализации командных инструментов docker.
Команда
docker inspect
без-f format
довольно многословна. Поскольку это JSON, вы можете передать его в python или nodejs и извлечь все, что вам нужно.docker history <image name>
покажет слои, запеченные в изображение. К сожалению,docker history
кажется затрудненным его форматированием и отсутствием вариантов выбора того, что отображается.Вы можете выбрать краткие и подробные форматы с помощью флага --no-trunc.
Вот подробный пример.
источник
С докером 1.10 у вас теперь есть новые команды для контейнеров с объемом данных.
(для обычных контейнеров, см. следующий раздел, для докера 1.8+):
docker volume ls
docker volume inspect
С докером 1.8.1 (август 2015), a
docker inspect -f '{{ .Volumes }}' containerid
будет пустым!Теперь вам нужно проверить
Mounts
, что представляет собой список смонтированных путей, например:Если вы хотите путь первого монтирования (например), это будет (с использованием индекса 0):
Как Майк Миттерер комментирует ниже :
Или, как заметил по Митя , используйте
jq
команду .источник
jq
пакет под Ubuntu, а затем простоdocker inspect -f '{{ json .Mounts }}' containerid | jq
Показать имена и точки монтирования томов, используемых контейнером:
Это совместимо с Docker 1.13.
источник
Я на самом деле гуглил это и нашел свой ответ :) Моя память в эти дни ... И для тех, кто не знает об этом commandlinefu - отличное место, чтобы найти и опубликовать эти любопытные фрагменты.
Список томов докера по контейнерам.
Пример вывода.
источник
Вы можете получить информацию о том, какие тома были специально запечены в контейнере, проверив контейнер и просмотрев выходные данные JSON и сравнив пару полей. При запуске
docker inspect myContainer
, тоVolumes
иVolumesRW
поля дают вам информацию о ВСЕХ объемах , установленных внутри контейнера, в том числе объемы установлены как в Dockerfile сVOLUME
директивой, и в командной строке сdocker run -v
командой. Однако вы можете изолировать, какие тома были смонтированы в контейнере, используяdocker run -v
команду, проверив наличиеHostConfig.Binds
поля вdocker inspect
выводе JSON. Чтобы уточнить, в этомHostConfig.Binds
поле указывается, какие тома были смонтированы именно в вашейdocker run
команде с-v
вариант. Поэтому, если вы свяжете это поле сVolumes
полем, вы сможете определить, какие тома были запечены в контейнере, используяVOLUME
директивы в Dockerfile.Grep может выполнить это как:
И...
И в моем примере, вы можете увидеть , что я установлен
/var/docker/docker-registry/config
в контейнер,/registry
используя-v
опцию в моейdocker run
команде, и я поднялся на/data
и/config
тома с помощьюVOLUME
директивы в моей Dockerfile. Контейнер не должен быть запущен для получения этой информации, но он должен быть запущен как минимум один раз, чтобы заполнитьHostConfig
вывод JSON вашейdocker inspect
команды.источник
HostConfig.Binds
и чем он отличается от.Volumes
увиденного в ответе @Paul?.Volumes
перечисляет «пути точекHostConfig.Binds
привязки объекта (строки) внутри контейнера к пустым объектам» и описывает фактическое связывание объемы в контейнере. Тогда мне кажется, чтоHostConfig.Binds
это то, что вы хотите прочитать.Volumes
, хотя я хотел бы услышать лучшие рассуждения.#docker
на Freenode (основной канал для докера), и если я что-нибудь услышу назад, я обязательно обновлю здесь с дополнительной информацией. Это очень хороший вопрос, который вы задали здесь о разнице. Спасибо!HostConfig.Binds
заполняется ли только когда указан путь к хосту тома? Например,docker run -d -v /docker-test:/docker-test postgres
противdocker run -d -v /docker-test postgres
. Похоже, докер обрабатывает эти два случая тома совершенно по-разному.Для Docker 1.8 я использую:
источник
Если вы хотите перечислить все имена контейнеров с соответствующими томами, которые прикреплены к каждому контейнеру, вы можете попробовать это:
пример вывода:
/ opt_rundeck_1 - имя контейнера
[..] - тома, прикрепленные к конденсатору
источник
Вот одна строковая команда для получения информации о томе для запущенных контейнеров:
Выход:
Версия докера:
источник
Полезная вариация для пользователей docker-compose:
Это очень аккуратно выведет информацию о разбираемом объеме. Пример из моего wordpress docker-compose:
Вывод содержит одну строку для каждого контейнера, в которой перечислены используемые тома (и точки монтирования). Измените часть {{.Name}}: {{.Destination}}, чтобы вывести необходимую информацию.
Если вы просто хотите простой список томов, по одному на строку
Отлично подходит для создания списка томов для резервного копирования. Я использую эту технику вместе с Blacklabelops Volumerize для резервного копирования всех томов, используемых всеми контейнерами в docker-compose. Документы для Volumerize не вызывают его, но вам не нужно использовать его в постоянном контейнере или использовать встроенные средства для запуска и остановки служб. Я предпочитаю оставлять важные операции, такие как резервное копирование и управление службами, фактическому пользователю (вне докера). Мои резервные копии инициируются реальной (не докерной) учетной записью пользователя и используют команду docker-compose stop для остановки служб, резервного копирования всех используемых томов и, наконец, docker-compose start для перезапуска.
источник
источник
Вот моя версия, чтобы найти точки монтирования docker compose. Используется для резервного копирования томов.
Это комбинация предыдущих решений.
источник
Если вы используете pwsh (ядро powershell), вы можете попробовать
Также вы можете увидеть как имя контейнера, так и Mounts, как показано ниже
Поскольку вывод преобразуется в json, вы можете получить любые свойства, которые у него есть.
источник
Мы можем сделать это без синтаксиса шаблона -f Go:
Первая операция jq
jq .[]
удаляет{}
обертку объекта .Вторая операция jq вернет все элементы Mount.
источник