当使用来自注册中心的docker映像时,我经常需要查看映像容器创建的卷。
注意:我在Red Hat 7上使用docker 1.3.2版本。
例子
Docker Registry的postgress官方镜像有一个为容器/var/lib/postgresql/data.配置的卷
在postgres容器中显示/var/lib/postgresql/data的卷最简洁的命令是什么?
当使用来自注册中心的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 '.[]'
其他回答
我们可以不使用-f Go模板语法:
docker inspect <CONTAINER_ID> | jq .[].Mounts
第一个jq操作jq .[]将对象{}包装器剥离。
第二个jq操作将返回所有Mount项。
显示容器使用的卷的名称和挂载点目的地:
docker container inspect \
-f '{{ range .Mounts }}{{ .Name }}:{{ .Destination }} {{ end }}' \
CONTAINER_ID_OR_NAME
这与Docker 1.13兼容。
在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
如果你想列出所有的容器名称和每个容器的相关卷,你可以尝试这样做:
docker ps -q | xargs docker container inspect -f '{{ .Name }} {{ .HostConfig.Binds }}'
示例输出:
/ opt_rundeck_1 [/ opt / var /李勃/ mysql: / var /李勃/ mysql: rw / var /李勃/ rundeck / var /储存:/ var /李勃/ rundeck / var /储存:rw / opt / var / rundeck / .ssh: / var /李勃/ rundeck / .ssh: rw / etc / / opt / etc / rundeck: rundeck: rw / var / log / rundeck: / var / log / rundeck: rw / opt / rundeck-plugins: / opt / rundeck-plugins: rw / opt / var / rundeck: / var / rundeck: rw]
/ opt_r十一k_1 -容器名称
(. .-附在容器上的卷
我在谷歌上搜了一下,找到了我自己的答案:)我最近的记忆力……对于那些不了解它的人来说,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