【问题标题】:How do you list volumes in docker containers?你如何列出 docker 容器中的卷?
【发布时间】:2015-07-19 22:48:14
【问题描述】:

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

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

示例

Docker Registry 中的postgres 官方镜像在/var/lib/postgresql/data 有一个为容器配置的卷。

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

【问题讨论】:

标签: docker


【解决方案1】:

我们可以在没有 -f Go 模板语法的情况下做到这一点:

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

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

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

【讨论】:

  • docker inspect &lt;ContainerID&gt; | jq --raw-output .[].Mounts
  • 我收到null。为什么?
【解决方案2】:

使用Type:Source:Destination 格式打印坐骑:

docker container inspect \
    -f '{{range .Mounts}}{{.Type}}:{{.Source}}:{{.Destination}}{{println}}{{ end }}' \
    <containerId>

仅打印带有Type="volume" 的Mounts 的Source

docker container inspect \
    -f '{{range .Mounts}}{{ if eq .Type "volume" }}{{println .Source }}{{ end }}{{end}}' \
    <containerId>

【讨论】:

    【解决方案3】:

    来自 Docker 文档here

    .Mounts Names of the volumes mounted in this container.
    

    docker ps -a --no-trunc --format "{{.ID}}\t{{.Names}}\t{{.Mounts}}"

    应该工作

    【讨论】:

      【解决方案4】:

      我实际上用谷歌搜索了这个,并找到了我自己的答案:) 这些天我的记忆......对于那些不知道它的人commandlinefu 是一个查找和发布这些有点 sn-ps 的好地方。

      按容器列出 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
      

      【讨论】:

      • 这个可以满足我的需要。
      • 好棒的命令,我就用这个别名吧!
      【解决方案5】:

      如果你使用的是pwsh(powershell内核),你可以试试

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

      您还可以看到容器名称和挂载,如下所示

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

      由于输出转换为 json ,您可以获取它具有的任何属性。

      【讨论】:

        【解决方案6】:

        如果您想列出所有容器名称以及附加到每个容器的相关卷,您可以尝试以下操作:

        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 - 容器名称

        [..] - 附加到容器的卷

        【讨论】:

        • 虽然这在技术上是对问题的回答,但缺乏解释。请编辑您的评论,以便解释参数的作用以及提问者为什么要使用它们来解决他/她的问题中提出的问题。
        【解决方案7】:

        对 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 之外)。我的备份由实际(非docker)用户帐户触发,并使用docker-compose stop停止服务,备份所有正在使用的卷,最后docker-compose start重新启动。

        【讨论】:

          【解决方案8】:

          使用docker ps 获取容器id。

          然后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 命令工具。

          没有-f formatdocker inspect 命令非常冗长。由于它是 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 &lt;image name&gt; 将显示烘焙到图像中的图层。不幸的是,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 问题而不是 docker 问题。
          • 为了灵活性,通常不包含卷,而是使用 docker run 的 -v 选项在运行时附加。我似乎记得一个 dockerfile 选项,但从未见过使用它。建议提出一个超出当前范围的新问题。也许其他人可以提供帮助,在一个新问题上将最有效地吸引新的答案。
          • 我将这个问题归结为容器和asked a new question for images
          • 不再是卷,而是挂载。
          • 这个网站也有很好的解释:forums.docker.com/t/host-path-of-volume/12277/10
          【解决方案9】:

          使用 docker 1.10,您现在拥有用于数据卷容器的新命令。
          (对于常规容器,请参阅下一节,对于 docker 1.8+):


          使用 docker 1.8.1(2015 年 8 月),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
                 }
             ],
          

          如果你想要 first 挂载的路径(例如),那就是(使用索引 0):

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

          作为Mike Mitterer cmets below:

          漂亮地打印整个东西:

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

          或者,作为commented by Mitja,使用jq command

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

          【讨论】:

          • 漂亮打印整个内容:docker inspect -f '{{ json .Mounts }}' containerid | python -m json.tool
          • @MikeMitterer 谢谢。我已将您的评论包含在答案中以提高知名度。
          • 如果你想用漂亮的颜色进行漂亮的打印,你可以在 ubuntu 下安装 jq 包,然后直接使用管道:docker inspect -f '{{ json .Mounts }}' containerid | jq
          • @Mitja 谢谢。我已将您的评论包含在答案中以提高知名度。
          【解决方案10】:

          这是我查找 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
          

          这是以前解决方案的组合。

          【讨论】:

            【解决方案11】:

            这是获取运行容器的卷信息的一行命令:

            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[]
            

            Docker 版本:

            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
            

            【讨论】:

              【解决方案12】:

              显示容器使用的卷的名称和挂载点目的地:

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

              这与 Docker 1.13 兼容。

              【讨论】:

                【解决方案13】:
                docker inspect -f '{{ json .Mounts }}' containerid | jq '.[]'
                

                【讨论】:

                  【解决方案14】:

                  对于 Docker 1.8,我使用:

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

                  【讨论】:

                    【解决方案15】:

                    您可以通过检查容器并查看 JSON 输出并比较几个字段来获取有关哪些卷被专门烘焙到容器中的信息。当您运行 docker inspect myContainer 时,VolumesVolumesRW 字段会为您提供有关容器内安装的 ALL 卷的信息,包括使用 VOLUME 指令安装在 Dockerfile 中的卷,并在命令行上使用docker run -v 命令。但是,您可以使用docker run -v 命令通过检查docker inspect JSON 输出中的HostConfig.Binds 字段来隔离哪些卷已安装在容器中。澄清一下,这个HostConfig.Binds 字段告诉您在docker run 命令中使用-v 选项专门安装了哪些卷。因此,如果您将此字段与 Volumes 字段交叉引用,您将能够使用 Dockerfile 中的 VOLUME 指令确定哪些卷被烘焙到容器中。

                    一个 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"
                    

                    在我的示例中,您可以看到我已使用 -v 命令中的 -v 选项将 /var/docker/docker-registry/config 作为 /registry 安装到容器中,并且已安装 /data 和 @987654343 @volumes 在我的 Dockerfile 中使用 VOLUME 指令。容器不需要运行才能获取此信息,但它需要至少运行一次才能填充docker inspect 命令的HostConfig JSON 输出。

                    【讨论】:

                    • 什么是HostConfig.Binds,它与@Paul 的回答中的.Volumes 有何不同?
                    • 我刚刚花了最后一个小时查看 remote API docssource 以发现差异,据我所知,.Volumes 列出了“对象映射挂载点路径(字符串) 在容器内清空对象”,HostConfig.Binds 描述了容器中实际绑定安装的卷。在我看来,HostConfig.Binds 是您想要阅读的内容,而不是 .Volumes,尽管我希望听到更好的推理。
                    • 我已经在 Freenode(docker 的主要频道)上的 #docker 中询问过,如果我收到回复,我一定会在这里更新更多信息。这是一个很好的问题,你在这里问了关于差异的问题。谢谢!
                    • @CivFan 我有点错了。为了查看已将哪些卷烘焙到映像中,您需要同时使用 docker inspect 的 JSON 输出中的 Volumes 和 HostConfig.Binds 字段。我已经在这个答案中纠正了自己,现在或多或少地正确回答了你的问题,而不是我以前的问题。祝你好运! :)
                    • 您是否注意到HostConfig.Binds 仅在指定卷的主机路径时才会填充?例如,docker run -d -v /docker-test:/docker-test postgresdocker run -d -v /docker-test postgres。出于某种原因,docker 处理这两个卷案例的方式似乎完全不同。
                    猜你喜欢
                    • 2015-07-25
                    • 2015-08-19
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2013-05-26
                    • 2023-03-15
                    • 2017-08-14
                    • 1970-01-01
                    相关资源
                    最近更新 更多