rb6*_*612 1 docker dockerfile docker-compose
我的docker-compose.yml文件中有以下内容:
volumes:
- .:/var/www/app
- my_modules:/var/www/app/node_modules
Run Code Online (Sandbox Code Playgroud)
我这样做是因为node_modules我的主机上没有,并且所有内容都安装在映像中并位于/var/www/app/node_modules.
关于这个我有两个问题:
在我的主机中创建了一个名为node_modules. 如果我将另一个卷(命名或匿名)添加到我.yml文件中的列表中,它将显示在我的主机目录中包含我的.yml文件的同一文件夹中。从这个答案来看,这似乎与这两个映射同时进行的事实有关。但是,为什么我的主机上的文件夹是空的?它不应该 a) 包含来自命名卷的文件或 b) 根本不显示在主机上吗?
Docker 如何知道/var/www/app/node_modules在初始化卷时检查图像的底层,而不是仅仅说“哦,node_modules不存在”(因为我假设主机绑定安装在命名卷初始化之前发生,因此/var/www/app不应该再有一个名为 的文件夹node_modules。当我node_modules在我的主机上创建一个示例文件夹并同时保留一个新卷时,my_modules:/var/www/app/node_modules它似乎甚至可以工作- 它似乎仍然使用node_modules来自图像而不是来自主机(这不是我所期望的,虽然不是不需要)。
作为一个实现细节,Docker 实际上在每次挂载卷时使用 Linux 内核文件系统挂载工具。要挂载一个卷,它必须被挂载到一个目录上,所以如果挂载目标不存在,它会创建一个新的空目录作为挂载点。如果挂载点本身在已挂载的卷内,您将看到创建了空目录,但挂载不会得到回显。
(如果您在 Linux 主机上,请尝试mount在容器运行时在 shell 中运行。)
那是:
/container_root/app是绑定安装到/host_path/app; 它们是相同的底层文件。mkdir /container_root/app/node_modules也创造/host_path/app/node_modules。/container_root/app/node_modules不会导致安装任何东西/host_path/app/node_modules。/host_path/app/node_modules目录。第一次启动容器时,只有在将空卷装入容器时,映像中的内容才会复制到卷中。你告诉 Docker 这个目录包含需要持久化超过容器生命周期的关键数据。这不是一个神奇的“不使用主机目录卷”旋钮,如果您执行诸如更改package.json文件之类的操作,Docker 将不会更新此卷的内容。
| 归档时间: |
|
| 查看次数: |
2107 次 |
| 最近记录: |