2015-08-28 4 views
1

Так из документации, я могу запросить мой контейнер для его томов:Docker - Как проверить контейнер для тома?

docker inspect --format="{{.Volumes}}" container 

это возвращает пути в формате:

map[/container/path/1:/host/path/1 /container/path/2:/host/path/2] 

Мой вопрос, как вы извлечь один путь из это возвращаемые данные? Скажем, мне нужен только /host/path/2, поэтому я мог бы использовать его в сценарии для резервного копирования данных в этом томе.

ответ

2

Аргумент --format является стандартным выражением go text/template. Если вы хотите, чтобы получить хост пути, соответствующий конкретный контейнерного путь, вы можете сделать это:

$ docker inspect -f '{{index .Volumes "/container/path/1"}}' container 
/host/path/1 

Если вы хотите, чтобы получить список хоста: контейнерный пара, вы можете сделать это:

$ docker inspect -f '{{range $key, $value := .Volumes}}{{printf "%s:%s\n" $key $value}}{{end}}' 

что бы получить вас:

/container/path/1:/host/path/1 
/container/path/2:/host/path/2 

В этом примере мы воспользоваться этим синтаксисом:

Конвейер внутри действия может инициализировать переменную для получения результата . Инициализация имеет синтаксис

$variable := pipeline 

где $ variable - это имя переменной. Действие, объявляющее переменную , не выводит результат.

Если действие «range» инициализирует переменную, переменная устанавливается в последовательные элементы итерации . Кроме того, «Диапазон» может объявить два переменных, разделенных запятой:

range $index, $element := pipeline 

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

+0

очень полезный ответ, спасибо тонна. – Chockomonkey

Смежные вопросы