Docker 1.9添加了命名卷,所以我..
docker volume create --name postgres-data
docker volume ls
我得到
local postgres-data
到目前为止一切都很好。
所以我怎么看命名卷中的内容?有没有一种方法可以在主机系统上对其进行cd。就像我可以为挂载的主机目录一样吗?
Answers:
docker run --rm -i -v=postgres-data:/tmp/myvolume busybox find /tmp/myvolume
说明:使用工具创建一个最小的容器,以查看该卷的文件(busybox),将命名的卷安装在容器的目录(v=postgres-data:/tmp/myvolume
),列出该卷的文件(find /tmp/myvolume
)。列出完毕后,移走容器(--rm
)。
你可以跑
docker volume inspect postgres-data
并查看Mountpoint
结果部分
因此源参数将指向主机目录或
/var/lib/docker/volumes/[volume_name]/_data
目录
docker volume inspect postgres-data
?
docker volume ls
您可以通过运行查看docker在何处存储卷docker volume inspect <volume>
。
但有一个警告:您无法在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,请在此答案的注释中查看解决方案。
\\wsl$\docker-desktop-data\version-pack-data\community\docker\volumes
在Windows资源管理器中转到。
我使用这个方便的功能来列出我的卷的内容:
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
带* jq
:
$ sudo ls -l $(docker volume inspect VOLUME_NAME | jq -r '.[0].Mountpoint')
*如果尚未安装,请查看jq doc页面以获取有关如何安装的详细信息(PACKAGE_MANAGER install jq
)。
或者没有必要为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
当需要快速查找某些内容时,始终使用它。