首页 > 解决方案 > 如何解释 /dev/vda1?

问题描述

在我的 Dockerfile 中,这些是内容,

FROM php:7.0-apache
COPY src/ /var/www/html/public
VOLUME src/ /var/www/html/public
EXPOSE 80    

你看,我已经挂载/src/var/www/html/public现在我去了容器,以找出容器内所有挂载的具体情况/src /var/ww/html/public

我搜索了它,发现该命令/proc/mounts可以帮助我。所以我尝试了,结果是

...
/dev/vda1 /src ext4 rw,relatime 0 0
/dev/vda1 /etc/resolv.conf ext4 rw,relatime 0 0
/dev/vda1 /etc/hostname ext4 rw,relatime 0 0
/dev/vda1 /etc/hosts ext4 rw,relatime 0 0
/dev/vda1 /var/www/html/public ext4 rw,relatime 0 0
...

这部分结果确实包含我想知道的东西。由于第一行包含/src,第 5 行包含/var/www/html/public 但是我如何解释结果。换句话说,通过查看文件内容,我如何知道/src安装到容器目录的主机/var/www/html/public

我以为我会得到这样的结果。

/src /var/www/html/public而是/dev/vda1在干扰,所以我怎么理解这一点。

标签: docker

解决方案


Dockerfile 不能声明任何特定的主机目录。相反,您所做的是告诉Docker在目录./src/var/www/html/public. 几乎没有理由这样做,您应该删除该VOLUME行。

在应用程序的源代码上挂载主机目录不一定是最佳实践:这意味着您没有运行内置于映像中的代码,因此映像实际上可能无法在不同的环境中重现地运行。如果需要,则docker run -v在启动容器时需要一个选项。Dockerfile 中不需要任何东西来使这成为可能,而且你不能强制它。

没有简单的方法来判断从容器内部安装了哪些卷,并且 Docker 通过设计隐藏了主机系统的详细信息(因此多个不同的东西显然都是从同一设备安装的)。可以测试一下在host/container中编辑一个文件的具体效果,看看container/host中对应的变化。还引用了一条评论如何列出 docker 容器中的卷?其中列出了几种使用docker来自主机的命令进行测试的方法。


推荐阅读