提问者:小点点

如何从容器中列出Docker装入的卷


我想列出已装入卷的所有容器目录。

也就是说,能够获得类似的信息,我从

docker inspect --format "{{ .Volumes }}" <self>

但是从容器内部并且没有安装docker

我尝试了猫 /proc/mounts,但是我找不到合适的过滤器。


共3个答案

匿名用户

(编辑-这可能不再适用于Mac)如果Docker主机是OS

mount | grep osxfs | awk'{print$3}'

并获取所有已装入卷的列表

如果您的Docker主机是Linux(至少是Ubuntu14,可能还有其他主机),那么卷似乎都在/dev上,而不是在容器的/dev文件系统中的设备上。这些卷将位于/etc/resolv旁边。conf/etc/hostname/etc/hosts。如果您先执行mount | grep^/dev启动,然后过滤掉ls/dev/*中的任何文件,然后过滤掉上面列出的三个文件,您应该剩下主机卷。

mount | grep^/dev/| grep-v/etc | awk'{print$3}'

我的猜测是,具体细节可能因Linux而异。不太理想,但至少有可能找到答案。

匿名用户

假设您想检查从基于linux的容器中安装了哪些卷,您可以在 /etc/mtab中查找以“/dev”开头的条目,删除 /etc条目

$ grep "^/dev" /etc/mtab | grep -v " \/etc/"

/dev/nvme0n1p1 /var/www/site1 ext4 rw,relatime,discard,data=ordered 0 0
/dev/nvme0n1p1 /var/www/site2 ext4 rw,relatime,discard,data=ordered 0 0

匿名用户

正如您可以从许多评论中读到的那样,容器最初只是资源的一个受限制的、保留的部分,完全与机器的其余部分隔开。它不知道自己是Docker,在容器内,一切都表现得好像是一台独立的机器。有点像矩阵,我猜;)

您可以访问主机的内核及其资源,但仍然受到限制,因为它只是一个过滤掉的集。这是通过Unix/Linux内核附带的令人敬畏的“cgroup”功能实现的。

现在好消息是:有多种方法可以让您向Docker提供信息,但这是你必须自己提供和构建的。

最简单、最强大的方法是将Unix套接字安装在主机上的/var/run/docker。将袜子放在容器内部的同一位置。这样,当您在容器中使用Docker客户端时,您直接与主机上的Docker引擎进行对话。

然而,权力越大,责任越大。这是一个不错的设置,但它不是很安全。一旦有人设法进入你的docker,它就可以以这种方式访问你的主机系统。

更好的方法是通过环境设置提供坐骑列表,或者坚持一些虚构的约定来预测坐骑。

(您是否意识到有一个装载参数,为Docker内部的装载提供别名?)