我想列出已装入卷的所有容器目录。
也就是说,能够获得类似的信息,我从
docker inspect --format "{{ .Volumes }}" <self>
但是从容器内部并且没有安装docker
。
我尝试了猫 /proc/mounts,但是我找不到合适的过滤器。
(编辑-这可能不再适用于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内部的装载提供别名?)