如何在docker 1.9 +中列出命名卷的内容?

时间:2016-01-15 02:33:39

标签: docker

Docker 1.9添加了命名卷,所以我......

docker volume create --name postgres-data

docker volume ls 

我得到了

local               postgres-data
到目前为止一切都很好..

那么如何查看指定卷中的内容?有没有办法在主机系统上cd到它。就像我可以安装主机目录一样?

7 个答案:

答案 0 :(得分:46)

docker run --rm -i -v=postgres-data:/tmp/myvolume busybox find /tmp/myvolume

说明:使用工具创建一个最小容器以查看卷的文件(busybox),将命名卷挂载到容器的目录(v=postgres-data:/tmp/myvolume),列出卷的文件(find /tmp/myvolume)。列表完成后删除容器(--rm)。

答案 1 :(得分:23)

你可以跑 docker volume inspect postgres-data

并查看结果的Mountpoint部分

因此source参数将指向主机目录 也许 /var/lib/docker/volumes/[volume_name]/_data目录

答案 2 :(得分:8)

通过运行docker volume inspect <volume>,您可以看到docker将卷存储在何处。

但是有一个警告:您不能直接在Mac和Windows上看到卷的内容。 发生这种情况是因为Docker实际上运行Linux VM以便能够进行容器化,因为containzerzation是Linux的本机功能,但不是其他OS的本机功能。因此,显示的路径实际上是VM内的路径,而不是主机系统上的路径。

您可以使用其他答案中提到的方法来访问这些卷(创建一个临时容器只是为了查看内容),也可以直接访问它们。

对于Mac,您可以使用screen来访问VM,如下所示:

# This path can be slightly different on your system
screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty

到达那里后,您可以导航到docker volume inspect给您的路径。

对于Windows,请在此答案的注释中查看解决方案。

答案 3 :(得分:5)

这是一个想法...

docker run -it --name admin -v postgres-data:/var/lib/postgresql/data ubuntu

然后在交互式shell

ls /var/lib/postgresql/data 

欢迎更好的想法!

答案 4 :(得分:3)

我使用这个方便的功能来列出我的卷的内容:

dvolume() {
  local volume volumes_to_list=${1:-$(docker volume ls --quiet)}
  for volume in $volumes_to_list; do
    sudo ls -lRa "$(docker volume inspect --format '{{ .Mountpoint }}' "$volume")"
    echo
  done
}

请注意,您可以通过两种方式调用该函数:

$ dvolume           # for each volume, list its content
$ dvolume <volume>  # list <volume>'s content

答案 5 :(得分:3)

或者不需要用于 jq 新容器

cd到目录:

cd $(docker volume inspect <volume name> | grep Mountpoint | cut -d\" -f 4)

查看目录的内容:

ls -las $(docker volume inspect <volume name> | grep Mountpoint | cut -d\" -f 4)

更好!查看所有卷的内容:__

for i in  `docker volume ls -q`; do echo volume: ${i}; \
ls -las $(docker volume inspect $i | grep Mountpoint | cut -d\" -f 4); \
done

在需要快速查找内容时始终使用它。

答案 6 :(得分:0)

到目前为止可能毫无意义,但仍然:

sudo ls -l $(docker volume inspect myvolumename | jq -r '.[0].Mountpoint')

检查jq doc page以获得有关如何安装的详细信息。