当使用来自注册中心的docker映像时,我经常需要查看映像容器创建的卷。

注意:我在Red Hat 7上使用docker 1.3.2版本。

例子

Docker Registry的postgress官方镜像有一个为容器/var/lib/postgresql/data.配置的卷

在postgres容器中显示/var/lib/postgresql/data的卷最简洁的命令是什么?


当前回答

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

其他回答

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

对于Docker 1.8,我使用:

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

在docker版本>= 1.8上使用单引号

docker inspect -f '{{ .Mounts }}' containerid

导致以下错误-

Template parsing error: template: :1: unclosed action

用双引号代替-

docker inspect -f "{{ .Mounts }}" <contained-id>

我在谷歌上搜了一下,找到了我自己的答案:)我最近的记忆力……对于那些不了解它的人来说,commandlinefu是一个找到并发布这些代码片段的好地方。

按容器列出docker卷。

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

我们可以不使用-f Go模板语法:

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

第一个jq操作jq .[]将对象{}包装器剥离。

第二个jq操作将返回所有Mount项。