假设我有一个Docker容器和主机上的文件夹 /hostFolder
. 现在,如果我想将此文件夹作为卷添加到Docker容器中,那么我可以通过在 Dockerfile
中使用 ADD
或将其作为卷安装来执行此操作 .
到现在为止还挺好 .
现在 /hostFolder
包含一个子文件夹 /hostFolder/subFolder
.
我想将 /hostFolder
挂载到Docker容器中(无论是读写还是只读都无关紧要,对我来说都适用),但是我想 NOT 想要包含它 /hostFolder/subFolder
. 我想排除这个,我也希望Docker容器能够对这个子文件夹进行更改,而不会在主机上更改它 .
这可能吗?如果是这样,怎么样?
4 回答
使用docker-compose我可以在本地使用node_modules,但是使用
docker-compose.yml
中的以下语法在docker容器中忽略它所以
./angularApp
中的所有内容都映射到/opt/app
然后我创建了另一个挂载卷/opt/app/node_modules/
,它现在是空目录 - 即使在我的本地计算机./angularApp/node_modules
不为空 .如果您希望docker-compose忽略子目录但持久化,则可以在
docker-compose.yml
中执行以下操作:这会将您当前的目录挂载为共享卷,但挂载持久性docker卷代替本地
node_modules
目录 . 这类似于@kernix的答案,但是这将允许node_modules
在docker-compose up
次运行之间持续存在,这可能是期望的行为 .首先,在Dockerfile中使用
ADD
指令与使用卷(通过-v
参数到docker run
或Dockerfile中的VOLUME
指令)非常不同 .ADD
和COPY
命令只是在运行docker build
时获取文件的副本 . 在使用docker build
命令创建新图像之前,不会更新这些文件 . 相比之下,使用音量基本上是说"this directory should not be stored in the container image; instead use a directory on the host";每当卷中的文件发生更改时,主机和容器都会立即看到它 .我不相信你可以使用卷实现你想要的东西,如果你想这样做,你将不得不重新考虑你的目录结构 .
但是,使用
COPY
(应优先于ADD
)实现起来非常简单 . 您可以使用.dockerignore
文件排除子目录,也可以COPY
所有文件然后执行RUN rm bla
以删除子目录 .请记住,使用
COPY
或ADD
添加到图像的任何文件都必须位于构建上下文中,即在您运行的目录中或者下面.1484586_ .要排除文件,请使用以下命令