docker - 如何解释 /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
在干扰,所以我怎么理解这一点。
解决方案
Dockerfile 不能声明任何特定的主机目录。相反,您所做的是告诉Docker在目录./src
和/var/www/html/public
. 几乎没有理由这样做,您应该删除该VOLUME
行。
在应用程序的源代码上挂载主机目录不一定是最佳实践:这意味着您没有运行内置于映像中的代码,因此映像实际上可能无法在不同的环境中重现地运行。如果需要,则docker run -v
在启动容器时需要一个选项。Dockerfile 中不需要任何东西来使这成为可能,而且你不能强制它。
没有简单的方法来判断从容器内部安装了哪些卷,并且 Docker 通过设计隐藏了主机系统的详细信息(因此多个不同的东西显然都是从同一设备安装的)。可以测试一下在host/container中编辑一个文件的具体效果,看看container/host中对应的变化。还引用了一条评论如何列出 docker 容器中的卷?其中列出了几种使用docker
来自主机的命令进行测试的方法。
推荐阅读
- batch-file - 通过 Windows 批处理/命令脚本将感叹号 (!) 传递给 groovy 脚本
- sparse-matrix - 优化稀疏矩阵求解时间
- linux-kernel - 如何在 Yocto 中彻底重建 Linux 内核模块?
- r - 如何在 R 中运行嵌套 for 循环以从 DOMO 导入数据表?
- r - 如何通过多边形找到垂直于最大弦的最长弦
- typescript - Chai Mocha 测试 Promise Property '最终' 不存在
- sql-server - 将 STDistance 应用于表的所有行?
- python - 如何捕捉 LightGBM 训练进度
- java - 获取 HTTP 状态 404 - 未找到,当使用 Eclipse 重命名并部署在 Glassfish 上的动态 Web 项目的名称时
- facebook - Facebook Page Insights API:page_fans 字段提供信息的具体方式如何更新?