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

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

例子

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

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


当前回答

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

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

导致以下错误-

Template parsing error: template: :1: unclosed action

用双引号代替-

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

其他回答

在docker 1.10中,现在有了用于数据量容器的新命令。 (对于常规容器,请参见下一节,对于docker 1.8+):

Docker卷ls 码头容积检查


在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
       }
   ],

如果你想要第一个挂载的路径(例如),这将是(使用索引0):

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

Mike Mitterer在下面评论道:

漂亮的打印整件事:

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

或者,正如Mitja所评论的那样,使用jq命令。

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

You can get information about which volumes were specifically baked into the container by inspecting the container and looking in the JSON output and comparing a couple of the fields. When you run docker inspect myContainer, the Volumes and VolumesRW fields give you information about ALL of the volumes mounted inside a container, including volumes mounted in both the Dockerfile with the VOLUME directive, and on the command line with the docker run -v command. However, you can isolate which volumes were mounted in the container using the docker run -v command by checking for the HostConfig.Binds field in the docker inspect JSON output. To clarify, this HostConfig.Binds field tells you which volumes were mounted specifically in your docker run command with the -v option. So if you cross-reference this field with the Volumes field, you will be able to determine which volumes were baked into the container using VOLUME directives in the 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"

在我的例子中,你可以看到我使用docker run命令中的-v选项将/var/docker/docker-registry/config挂载到容器中作为/registry,并且我使用Dockerfile中的VOLUME指令挂载了/data和/config卷。容器不需要运行来获取这些信息,但它需要至少运行一次才能填充docker inspect命令的HostConfig JSON输出。

从Docker文档这里

.Mounts Names of the volumes mounted in this container.

码头工人ps————no-trunc格式”{{.ID}} {{. name}} \ \ t t {{.Mounts}}”

应该工作

这是我的版本,找到一个码头撰写挂载点。 在使用此备份卷时。

 # 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

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

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

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

这与Docker 1.13兼容。