Как вы перечисляете тома в докер-контейнерах?


214

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

Примечание: я использую докер версии 1.3.2 в Red Hat 7.

пример

postgresОфициальное изображение из Докер реестра имеет объем , настроенный для контейнеров в /var/lib/postgresql/data.

Какая самая короткая команда для отображения объема /var/lib/postgresql/dataв postgresконтейнере?


5
Примечание: похоже, что это изменилось с докером 1.8.1: см. Мой ответ ниже
VonC

Ответы:


324

Используйте docker psдля получения идентификатора контейнера.

затем docker inspect -f '{{ .Mounts }}' containerid

Пример:

Терминал 1

$ docker run -it -v /tmp:/tmp ubuntu:14.04 /bin/bash

терминал 2

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
ddb7b55902cc        ubuntu:14.04        "/bin/bash"         About a minute ago   Up About a minute                       distracted_banach   

$ docker inspect -f "{{ .Mounts }}" ddb7
map[/tmp:/tmp]

Выход

map[/tmp:/tmp] 

очевидно, из-за использования языка Go для реализации командных инструментов docker.

Команда docker inspectбез -f formatдовольно многословна. Поскольку это JSON, вы можете передать его в python или nodejs и извлечь все, что вам нужно.

paul@home:~$ docker inspect ddb7
[{
    "AppArmorProfile": "",
    "Args": [],
    "Config": {
        "AttachStderr": true,
        "AttachStdin": true,
        "AttachStdout": true,
        "Cmd": [
            "/bin/bash"
        ],
        "CpuShares": 0,
        "Cpuset": "",
        "Domainname": "",
        "Entrypoint": null,
        "Env": [
            "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
        ],
        "ExposedPorts": null,
        "Hostname": "ddb7b55902cc",
        "Image": "ubuntu:14.04",
        "MacAddress": "",
        "Memory": 0,
        "MemorySwap": 0,
        "NetworkDisabled": false,
        "OnBuild": null,
        "OpenStdin": true,
        "PortSpecs": null,
        "StdinOnce": true,
        "Tty": true,
        "User": "",
        "Volumes": null,
        "WorkingDir": ""
    },
    "Created": "2015-05-08T22:41:44.74862921Z",
    "Driver": "devicemapper",
    "ExecDriver": "native-0.2",
    "ExecIDs": null,
    "HostConfig": {
        "Binds": [
            "/tmp:/tmp"
        ],
        "CapAdd": null,
        "CapDrop": null,
        "ContainerIDFile": "",
        "Devices": [],
        "Dns": null,
        "DnsSearch": null,
        "ExtraHosts": null,
        "IpcMode": "",
        "Links": null,
        "LxcConf": [],
        "NetworkMode": "bridge",
        "PidMode": "",
        "PortBindings": {},
        "Privileged": false,
        "PublishAllPorts": false,
        "ReadonlyRootfs": false,
        "RestartPolicy": {
            "MaximumRetryCount": 0,
            "Name": ""
        },
        "SecurityOpt": null,
        "VolumesFrom": null
    },
    "HostnamePath": "/var/lib/docker/containers/ddb7b55902cc328612d794570fe9a936d96a9644411e89c4ea116a5fef4c311a/hostname",
    "HostsPath": "/var/lib/docker/containers/ddb7b55902cc328612d794570fe9a936d96a9644411e89c4ea116a5fef4c311a/hosts",
    "Id": "ddb7b55902cc328612d794570fe9a936d96a9644411e89c4ea116a5fef4c311a",
    "Image": "ed5a78b7b42bde1e3e4c2996e02da778882dca78f8919cbd0deb6694803edec3",
    "MountLabel": "",
    "Name": "/distracted_banach",
    "NetworkSettings": {
        "Bridge": "docker0",
        "Gateway": "172.17.42.1",
        "GlobalIPv6Address": "",
        "GlobalIPv6PrefixLen": 0,
        "IPAddress": "172.17.0.4",
        "IPPrefixLen": 16,
        "IPv6Gateway": "",
        "LinkLocalIPv6Address": "fe80::42:acff:fe11:4",
        "LinkLocalIPv6PrefixLen": 64,
        "MacAddress": "02:42:ac:11:00:04",
        "PortMapping": null,
        "Ports": {}
    },
    "Path": "/bin/bash",
    "ProcessLabel": "",
    "ResolvConfPath": "/var/lib/docker/containers/ddb7b55902cc328612d794570fe9a936d96a9644411e89c4ea116a5fef4c311a/resolv.conf",
    "RestartCount": 0,
    "State": {
        "Error": "",
        "ExitCode": 0,
        "FinishedAt": "0001-01-01T00:00:00Z",
        "OOMKilled": false,
        "Paused": false,
        "Pid": 6115,
        "Restarting": false,
        "Running": true,
        "StartedAt": "2015-05-08T22:41:45.367432585Z"
    },
    "Volumes": {
        "/tmp": "/tmp"
    },
    "VolumesRW": {
        "/tmp": true
    }
}
]

docker history <image name>покажет слои, запеченные в изображение. К сожалению, docker historyкажется затрудненным его форматированием и отсутствием вариантов выбора того, что отображается.

Вы можете выбрать краткие и подробные форматы с помощью флага --no-trunc.

$ docker history drpaulbrewer/spark-worker
IMAGE               CREATED             CREATED BY                                      SIZE
438ff4e1753a        2 weeks ago         /bin/sh -c #(nop) CMD [/bin/sh -c /spark/my-s   0 B
6b664e299724        2 weeks ago         /bin/sh -c #(nop) ADD file:09da603c5f0dca7cc6   296 B
f6ae126ae124        2 weeks ago         /bin/sh -c #(nop) MAINTAINER drpaulbrewer@eaf   0 B
70bcb3ffaec9        2 weeks ago         /bin/sh -c #(nop) EXPOSE 2222/tcp 4040/tcp 60   0 B
1332ac203849        2 weeks ago         /bin/sh -c apt-get update && apt-get --yes up   1.481 GB
8e6f1e0bb1b0        2 weeks ago         /bin/sh -c sed -e 's/archive.ubuntu.com/www.g   1.975 kB
b3d242776b1f        2 weeks ago         /bin/sh -c #(nop) WORKDIR /spark/spark-1.3.1    0 B
ac0d6cc5aa3f        2 weeks ago         /bin/sh -c #(nop) ADD file:b6549e3d28e2d149c0   25.89 MB
6ee404a44b3f        5 weeks ago         /bin/sh -c #(nop) WORKDIR /spark                0 B
c167faff18cf        5 weeks ago         /bin/sh -c adduser --disabled-password --home   335.1 kB
f55d468318a4        5 weeks ago         /bin/sh -c #(nop) MAINTAINER drpaulbrewer@eaf   0 B
19c8c047d0fe        8 weeks ago         /bin/sh -c #(nop) CMD [/bin/bash]               0 B
c44d976a473f        8 weeks ago         /bin/sh -c sed -i 's/^#\s*\(deb.*universe\)$/   1.879 kB
14dbf1d35e28        8 weeks ago         /bin/sh -c echo '#!/bin/sh' > /usr/sbin/polic   701 B
afa7a164a0d2        8 weeks ago         /bin/sh -c #(nop) ADD file:57f97478006b988c0c   131.5 MB
511136ea3c5a        23 months ago                                                       0 B

Вот подробный пример.

docker history --no-trunc=true drpaulbrewer/spark-worker
IMAGE                                                              CREATED             CREATED BY                                                                                                                                                                                                                                                                                                                                                                                                                        SIZE
438ff4e1753a60779f389a3de593d41f7d24a61da6e1df76dded74a688febd64   2 weeks ago         /bin/sh -c #(nop) CMD [/bin/sh -c /spark/my-spark-worker.sh]                                                                                                                                                                                                                                                                                                                                                                      0 B
6b664e29972481b8d6d47f98167f110609d9599f48001c3ca11c22364196c98a   2 weeks ago         /bin/sh -c #(nop) ADD file:09da603c5f0dca7cc60f1911caf30c3c70df5e4783f7eb10468e70df66e2109f in /spark/                                                                                                                                                                                                                                                                                                                            296 B
f6ae126ae124ca211c04a1257510930b37ea78425e31a273ea0b1495fa176c57   2 weeks ago         /bin/sh -c #(nop) MAINTAINER drpaulbrewer@eaftc.com                                                                                                                                                                                                                                                                                                                                                                               0 B
70bcb3ffaec97a0d14e93b170ed70cc7d68c3c9dfb0222c1d360a300d6e05255   2 weeks ago         /bin/sh -c #(nop) EXPOSE 2222/tcp 4040/tcp 6066/tcp 7077/tcp 7777/tcp 8080/tcp 8081/tcp                                                                                                                                                                                                                                                                                                                                           0 B
1332ac20384947fe1f15107213b675e5be36a68d72f0e81153d6d5a21acf35af   2 weeks ago         /bin/sh -c apt-get update && apt-get --yes upgrade     && apt-get --yes install sed nano curl wget openjdk-8-jdk scala     && echo "JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64" >>/etc/environment     && export MAVEN_OPTS="-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m"     && ./build/mvn -Phive -Phive-thriftserver -DskipTests clean package     && chown -R spark:spark /spark     && mkdir /var/run/sshd   1.481 GB
8e6f1e0bb1b0b9286947d3a4b443cc8099b00f9670aab1d58654051e06f62e51   2 weeks ago         /bin/sh -c sed -e 's/archive.ubuntu.com/www.gtlib.gatech.edu\/pub/' /etc/apt/sources.list > /tmp/sources.list && mv /tmp/sources.list /etc/apt/sources.list                                                                                                                                                                                                                                                                       1.975 kB
b3d242776b1f1f1ae5685471d06a91a68f92845ef6fc6445d831835cd55e5d0b   2 weeks ago         /bin/sh -c #(nop) WORKDIR /spark/spark-1.3.1                                                                                                                                                                                                                                                                                                                                                                                      0 B
ac0d6cc5aa3fdc3b65fc0173f6775af283c3c395c8dae945cf23940435f2785d   2 weeks ago         /bin/sh -c #(nop) ADD file:b6549e3d28e2d149c0bc84f69eb0beab16f62780fc4889bcc64cfc9ce9f762d6 in /spark/                                                                                                                                                                                                                                                                                                                            25.89 MB
6ee404a44b3fdd3ef3318dc10f3d002f1995eea238c78f4eeb9733d00bb29404   5 weeks ago         /bin/sh -c #(nop) WORKDIR /spark                                                                                                                                                                                                                                                                                                                                                                                                  0 B
c167faff18cfecedef30343ef1cb54aca45f4ef0478a3f6296746683f69d601b   5 weeks ago         /bin/sh -c adduser --disabled-password --home /spark spark                                                                                                                                                                                                                                                                                                                                                                        335.1 kB
f55d468318a4778733160d377c5d350dc8f593683009699c2af85244471b15a3   5 weeks ago         /bin/sh -c #(nop) MAINTAINER drpaulbrewer@eaftc.com                                                                                                                                                                                                                                                                                                                                                                               0 B
19c8c047d0fe2de7239120f2b5c1a20bbbcb4d3eb9cbf0efa59ab27ab047377a   8 weeks ago         /bin/sh -c #(nop) CMD [/bin/bash]                                                                                                                                                                                                                                                                                                                                                                                                 0 B
c44d976a473f143937ef91449c73f2cabd109b540f6edf54facb9bc2b4fff136   8 weeks ago         /bin/sh -c sed -i 's/^#\s*\(deb.*universe\)$/\1/g' /etc/apt/sources.list                                                                                                                                                                                                                                                                                                                                                          1.879 kB
14dbf1d35e2849a00c6c2628055030fa84b4fb55eaadbe0ecad8b82df65cc0db   8 weeks ago         /bin/sh -c echo '#!/bin/sh' > /usr/sbin/policy-rc.d                                                                                                                                                                                                                                                                                                                                                                               && echo 'exit 101' >> /usr/sbin/policy-rc.d    && chmod +x /usr/sbin/policy-rc.d                        && dpkg-divert --local --rename --add /sbin/initctl    && cp -a /usr/sbin/policy-rc.d /sbin/initctl    && sed -i 's/^exit.*/exit 0/' /sbin/initctl                        && echo 'force-unsafe-io' > /etc/dpkg/dpkg.cfg.d/docker-apt-speedup                        && echo 'DPkg::Post-Invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };' > /etc/apt/apt.conf.d/docker-clean    && echo 'APT::Update::Post-Invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };' >> /etc/apt/apt.conf.d/docker-clean    && echo 'Dir::Cache::pkgcache ""; Dir::Cache::srcpkgcache "";' >> /etc/apt/apt.conf.d/docker-clean                        && echo 'Acquire::Languages "none";' > /etc/apt/apt.conf.d/docker-no-languages                        && echo 'Acquire::GzipIndexes "true"; Acquire::CompressionTypes::Order:: "gz";' > /etc/apt/apt.conf.d/docker-gzip-indexes   701 B
afa7a164a0d215dbf45cd1aadad2a4d12b8e33fc890064568cc2ea6d42ef9b3c   8 weeks ago         /bin/sh -c #(nop) ADD file:57f97478006b988c0c68e5bf82684372e427fd45f21cd7baf5d974d2cfb29e65 in /                                                                                                                                                                                                                                                                                                                                  131.5 MB
511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158   23 months ago                                                                                                                                                                                                                                                                                                                                                                                                                                         0 B

@CivFan Вы также можете задать еще один вопрос о строках формата Go, чтобы получить вывод в формате строки, который вы можете использовать .... это будет вопрос Go, а не вопрос докера.
Пол

Для большей гибкости обычно не включаются тома, но вместо этого опция -v для запуска Docker используется для подключения во время выполнения. Я, кажется, вспоминаю опцию dockerfile, но никогда не видел, чтобы она использовалась. Рекомендую задать новый вопрос по любому из этих вопросов, выходящий за рамки текущего. Может быть, кто-то еще может помочь, на новый вопрос будет наиболее эффективно привлекать новые ответы.
Пол

1
Я свел этот вопрос к простым контейнерам и задал новый вопрос для изображений .
CivFan

8
Это больше не тома, а крепления.
SIGIS

Этот веб-сайт также имеет довольно хорошее объяснение: forums.docker.com/t/host-path-of-volume/12277/10
Curveorzos

106

С докером 1.10 у вас теперь есть новые команды для контейнеров с объемом данных.
(для обычных контейнеров, см. следующий раздел, для докера 1.8+):


С докером 1.8.1 (август 2015), a docker inspect -f '{{ .Volumes }}' containeridбудет пустым!

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

   "Mounts": [
       {
           "Name": "7ced22ebb63b78823f71cf33f9a7e1915abe4595fcd4f067084f7c4e8cc1afa2",
           "Source": "/mnt/sda1/var/lib/docker/volumes/7ced22ebb63b78823f71cf33f9a7e1915abe4595fcd4f067084f7c4e8cc1afa2/_data",
           "Destination": "/home/git/repositories",
           "Driver": "local",
           "Mode": "",
           "RW": true
       }
   ],

Если вы хотите путь первого монтирования (например), это будет (с использованием индекса 0):

docker inspect -f '{{ (index .Mounts 0).Source }}' containerid

Как Майк Миттерер комментирует ниже :

Довольно распечатать все это:

 docker inspect -f '{{ json .Mounts }}' containerid | python -m json.tool 

Или, как заметил по Митя , используйте jqкоманду .

docker inspect -f '{{ json .Mounts }}' containerid | jq 

4
Довольно распечатайте все это: docker inspect -f '{{json .Mounts}}' containerid | python -m json.tool
Майк Миттерер,

1
@MikeMitterer Спасибо. Я включил ваш комментарий в ответ для большей наглядности.
VonC

2
Если вам нужна симпатичная печать с красивыми цветами, вы можете установить jqпакет под Ubuntu, а затем просто docker inspect -f '{{ json .Mounts }}' containerid | jq
Mitja

1
@Mitja Спасибо. Я включил ваш комментарий в ответ для большей наглядности.
VonC

@AlbertValdez Рад быть полезным.
VonC

21

Показать имена и точки монтирования томов, используемых контейнером:

docker container inspect \
 -f '{{ range .Mounts }}{{ .Name }}:{{ .Destination }} {{ end }}' \
 CONTAINER_ID_OR_NAME

Это совместимо с Docker 1.13.


10

Я на самом деле гуглил это и нашел свой ответ :) Моя память в эти дни ... И для тех, кто не знает об этом commandlinefu - отличное место, чтобы найти и опубликовать эти любопытные фрагменты.

Список томов докера по контейнерам.

docker ps -a --format '{{ .ID }}' | xargs -I {} docker inspect -f '{{ .Name }}{{ printf "\n" }}{{ range .Mounts }}{{ printf "\n\t" }}{{ .Type }} {{ if eq .Type "bind" }}{{ .Source }}{{ end }}{{ .Name }} => {{ .Destination }}{{ end }}{{ printf "\n" }}' {}

Пример вывода.

root@jac007-truserv-jhb1-001 ~/gitlab $ docker ps -a --format '{{ .ID }}' | xargs -I {} docker inspect -f '{{ .Name }}{{ printf "\n" }}{{ range .Mounts }}{{ printf "\n\t" }}{{ .Type }} {{ if eq .Type "bind" }}{{ .Source }}{{ end }}{{ .Name }} => {{ .Destination }}{{ end }}{{ printf "\n" }}' {}
/gitlab_server_1

    volume gitlab-data => /var/opt/gitlab
    volume gitlab-config => /etc/gitlab
    volume gitlab-logs => /var/log/gitlab

/gitlab_runner_1

    bind /var/run/docker.sock => /var/run/docker.sock
    volume gitlab-runner-config => /etc/gitlab-runner
    volume 35b5ea874432f55a26c769e1cdb1ee3f06f78759e6f302e3c4b4aa40f3a495aa => /home/gitlab-runner

1
Этот делает то, что мне нужно.
Андрес Леон Рангель

8

Вы можете получить информацию о том, какие тома были специально запечены в контейнере, проверив контейнер и просмотрев выходные данные 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 может выполнить это как:

$ docker inspect myContainer | grep -C2 Binds
...
"HostConfig": {
    "Binds": [
        "/var/docker/docker-registry/config:/registry"
    ],

И...

$ docker inspect myContainer | grep -C3 -e "Volumes\":"
...
"Volumes": {
    "/data": "/var/lib/docker...",
    "/config": "/var/lib/docker...",
    "/registry": "/var/docker/docker-registry/config"

И в моем примере, вы можете увидеть , что я установлен /var/docker/docker-registry/configв контейнер, /registryиспользуя -vопцию в моей docker runкоманде, и я поднялся на /dataи /configтома с помощью VOLUMEдирективы в моей Dockerfile. Контейнер не должен быть запущен для получения этой информации, но он должен быть запущен как минимум один раз, чтобы заполнить HostConfigвывод JSON вашей docker inspectкоманды.


1
Чем HostConfig.Bindsи чем он отличается от .Volumesувиденного в ответе @Paul?
CivFan

1
Я только что провел последний час, просматривая удаленные документы API и источник, чтобы обнаружить разницу, и из того, что я могу сказать, .Volumesперечисляет «пути точек HostConfig.Bindsпривязки объекта (строки) внутри контейнера к пустым объектам» и описывает фактическое связывание объемы в контейнере. Тогда мне кажется, что HostConfig.Bindsэто то, что вы хотите прочитать .Volumes, хотя я хотел бы услышать лучшие рассуждения.
L0j1k

1
Я спросил #dockerна Freenode (основной канал для докера), и если я что-нибудь услышу назад, я обязательно обновлю здесь с дополнительной информацией. Это очень хороший вопрос, который вы задали здесь о разнице. Спасибо!
L0j1k

1
@CivFan Я был не прав. Чтобы увидеть, какие тома были запечены в образе, вам нужно использовать ОБА поля «Объемы» и «HostConfig.Binds» в выходных данных JSON проверки docker. Я исправил себя в этом ответе, который теперь более или менее правильно отвечает на ваш вопрос по сравнению с тем, что у меня было раньше. Удачи! :)
L0j1k

2
Вы заметили, HostConfig.Bindsзаполняется ли только когда указан путь к хосту тома? Например, docker run -d -v /docker-test:/docker-test postgresпротив docker run -d -v /docker-test postgres. Похоже, докер обрабатывает эти два случая тома совершенно по-разному.
CivFan

8

Для Docker 1.8 я использую:

$ docker inspect -f "{{ .Config.Volumes }}" 957d2dd1d4e8
map[/xmount/dvol.01:{}]
$ 

8

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

docker ps -q | xargs docker container inspect -f '{{ .Name }} {{ .HostConfig.Binds }}'

пример вывода:

/ opt_rundeck_1 [/ opt / var / lib / mysql: / var / lib / mysql: rw / var / lib / rundeck / var / storage: / var / lib / rundeck / var / storage: rw / opt / var / rundeck / .ssh: /var/lib/rundeck/.ssh: rw / opt / etc / rundeck: / etc / rundeck: rw / var / log / rundeck: / var / log / rundeck: rw / opt / rundeck-plugins: / opt / rundeck-plugins: rw / opt / var / rundeck: / var / rundeck: rw]

/ opt_rundeck_1 - имя контейнера

[..] - тома, прикрепленные к конденсатору


1
Хотя это технически является ответом на вопрос, в нем нет объяснения. Пожалуйста, отредактируйте свой комментарий так, чтобы вы объяснили, что делают параметры и почему спрашивающий вопрос хотел бы использовать их для решения проблемы, поставленной в его / ее вопросе.
Shawty

6

Вот одна строковая команда для получения информации о томе для запущенных контейнеров:

for contId in `docker ps -q`; do echo "Container Name: "   `docker ps -f "id=$contId" | awk '{print $NF}' | grep -v NAMES`; echo "Container Volume: " `docker inspect -f '{{.Config.Volumes}}' $contId`; docker inspect -f '{{ json .Mounts }}' $contId  | jq '.[]';   printf "\n"; done

Выход:

root@ubuntu:/var/lib# for contId in `docker ps -q`; do echo "Container Name: "   `docker ps -f "id=$contId" | awk '{print $NF}' | grep -v NAMES`; echo "Container Volume: " `docker inspect -f '{{.Config.Volumes}}' $contId`; docker inspect -f '{{ json .Mounts }}' $contId  | jq '.[]';   printf "\n"; done

Container Name:  freeradius
Container Volume:  map[]

Container Name:  postgresql
Container Volume:  map[/run/postgresql:{} /var/lib/postgresql:{}]
{
  "Propagation": "",
  "RW": true,
  "Mode": "",
  "Driver": "local",
  "Destination": "/run/postgresql",
  "Source":     "/var/lib/docker/volumes/83653a53315c693f0f31629f4680c56dfbf861c7ca7c5119e695f6f80ec29567/_data",
  "Name": "83653a53315c693f0f31629f4680c56dfbf861c7ca7c5119e695f6f80ec29567"
}
{
  "Propagation": "rprivate",
  "RW": true,
  "Mode": "",
  "Destination": "/var/lib/postgresql",
  "Source": "/srv/docker/postgresql"
}

Container Name:  rabbitmq
Container Volume:  map[]

Версия докера:

root@ubuntu:~# docker version
Client:
 Version:      1.12.3
 API version:  1.24
 Go version:   go1.6.3
 Git commit:   6b644ec
 Built:        Wed Oct 26 21:44:32 2016
 OS/Arch:      linux/amd64

Server:
 Version:      1.12.3
 API version:  1.24
 Go version:   go1.6.3
 Git commit:   6b644ec
 Built:        Wed Oct 26 21:44:32 2016
 OS/Arch:      linux/amd64

3

Полезная вариация для пользователей docker-compose:

docker-compose ps -q | xargs docker container inspect  \
   -f '{{ range .Mounts }}{{ .Name }}:{{ .Destination }} {{ end }}' 

Это очень аккуратно выведет информацию о разбираемом объеме. Пример из моего wordpress docker-compose:

ubuntu@core $ docker-compose ps -q | xargs docker container inspect  -f '{{ range .Mounts }}{{ .Name }}:{{ .Destination }} {{ end }}' 
core_wpdb:/var/lib/mysql 
core_wpcode:/code core_wphtml:/var/www/html 

Вывод содержит одну строку для каждого контейнера, в которой перечислены используемые тома (и точки монтирования). Измените часть {{.Name}}: {{.Destination}}, чтобы вывести необходимую информацию.

Если вы просто хотите простой список томов, по одному на строку

$ docker-compose ps -q | xargs docker container inspect  \
   -f '{{ range .Mounts }}{{ .Name }} {{ end }}' \
   | xargs -n 1 echo
core_wpdb
core_wpcode
core_wphtml

Отлично подходит для создания списка томов для резервного копирования. Я использую эту технику вместе с Blacklabelops Volumerize для резервного копирования всех томов, используемых всеми контейнерами в docker-compose. Документы для Volumerize не вызывают его, но вам не нужно использовать его в постоянном контейнере или использовать встроенные средства для запуска и остановки служб. Я предпочитаю оставлять важные операции, такие как резервное копирование и управление службами, фактическому пользователю (вне докера). Мои резервные копии инициируются реальной (не докерной) учетной записью пользователя и используют команду docker-compose stop для остановки служб, резервного копирования всех используемых томов и, наконец, docker-compose start для перезапуска.



1

Вот моя версия, чтобы найти точки монтирования docker compose. Используется для резервного копирования томов.

 # for Id in $(docker-compose -f ~/ida/ida.yml ps -q); do docker inspect -f '{{ (index .Mounts 0).Source }}' $Id; done
/data/volumes/ida_odoo-db-data/_data
/data/volumes/ida_odoo-web-data/_data

Это комбинация предыдущих решений.


0

Если вы используете pwsh (ядро powershell), вы можете попробовать

(docker ps --format='{{json .}}' |  ConvertFrom-Json).Mounts

Также вы можете увидеть как имя контейнера, так и Mounts, как показано ниже

docker ps --format='{{json .}}' |  ConvertFrom-Json | select Names,Mounts

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


0

Мы можем сделать это без синтаксиса шаблона -f Go:

docker inspect <CONTAINER_ID> | jq .[] | jq .Mounts[]

Первая операция jq jq .[]удаляет {}обертку объекта .

Вторая операция jq вернет все элементы Mount.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.