Gol*_*den 170 docker dockerfile
假设我的主机上有一个Docker容器和一个文件夹/hostFolder.现在,如果我要对这个文件夹添加到多克尔容器的体积,那么我可以通过使用这样做ADD在Dockerfile或安装它作为一个音量.
到现在为止还挺好.
现在/hostFolder包含一个子文件夹/hostFolder/subFolder.
我想挂载/hostFolder到泊坞容器(无论是读写或只读并不重要,无论是对我的作品),但我不希望把它列入/hostFolder/subFolder.我想排除这个,我也希望Docker容器能够对这个子文件夹进行更改,而不会在主机上更改它.
这可能吗?如果是这样,怎么样?
ker*_*nix 340
使用docker-compose我可以在本地使用node_modules,但是在docker容器中使用以下语法忽略它 docker-compose.yml
volumes:
- './angularApp:/opt/app'
- /opt/app/node_modules/
Run Code Online (Sandbox Code Playgroud)
因此,所有内容./angularApp都映射到/opt/app,然后我创建另一个挂载卷/opt/app/node_modules/,现在是空目录 - 即使在我的本地计算机./angularApp/node_modules中不是空的.
Nat*_*e T 109
如果您希望docker-compose忽略子目录但持久化,则可以在以下位置执行以下操作docker-compose.yml:
volumes:
node_modules:
services:
server:
volumes:
- .:/app
- node_modules:/app/node_modules
Run Code Online (Sandbox Code Playgroud)
这会将当前目录挂载为共享卷,但会挂载持久性docker卷来代替本地node_modules目录.这类似于@kernix的答案,但这将允许node_modules在docker-compose up运行之间保持,这可能是期望的行为.
Fra*_*ong 14
要排除文件,请使用以下命令
volumes:
- /hostFolder:/folder
- /dev/null:/folder/fileToBeExcluded
Run Code Online (Sandbox Code Playgroud)
小智 14
对于那些试图在node_modules不被本地覆盖的地方获得良好工作流程的人来说,这可能会有所帮助。
services:
server:
build: .
volumes:
- .:/app
- /app/node_modules
Run Code Online (Sandbox Code Playgroud)
docker-compose -V. 如果没有这个,如果你添加了一个新的包并重建了你的镜像,它将使用node_modules你最初的 docker-compose 启动。 -V, --renew-anon-volumes Recreate anonymous volumes instead of retrieving
data from the previous containers.
Run Code Online (Sandbox Code Playgroud)
Adr*_*uat 13
首先,使用ADDDockerfile中的指令与使用卷(通过参数或Dockerfile中的指令)非常不同.在与命令只是把当时的文件的副本运行.在使用该命令创建新图像之前,不会更新这些文件.相比之下,使用卷实质上是说"此目录不应存储在容器映像中;而是使用主机上的目录"; 每当卷中的文件发生更改时,主机和容器都会立即看到它.-vdocker runVOLUMEADDCOPYdocker builddocker build
我不相信你可以使用卷实现你想要的东西,如果你想这样做,你将不得不重新考虑你的目录结构.
但是,实现使用非常简单COPY(应该优先考虑ADD).您可以使用.dockerignore文件来排除子目录,也可以使用COPY所有文件RUN rm bla来删除子目录.
请记住,任何文件添加到图像使用COPY或ADD必须在IE或下方运行的目录中生成上下文中docker build的.
DS.*_*DS. 12
使用 docker 命令行:
docker run \
--mount type=bind,src=/hostFolder,dst=/containerFolder \
--mount type=volume,dst=/containerFolder/subFolder \
...other-args...
Run Code Online (Sandbox Code Playgroud)
-v也可以使用该选项(归功于Bogdan Mart),但--mount更清晰和推荐。
小智 7
看起来旧的解决方案不再适用(至少对我而言)。不过,创建一个空文件夹并将目标文件夹映射到它会有所帮助。
volumes:
- ./angularApp:/opt/app
- .empty:/opt/app/node_modules/
Run Code Online (Sandbox Code Playgroud)
小智 5
对于也有问题的人,node_modules文件夹仍然会从本地系统覆盖,反之亦然
volumes:
node_modules:
services:
server:
volumes:
- .:/app
- node_modules:/app/node_modules/
Run Code Online (Sandbox Code Playgroud)
这是解决方案,/修复了node_modules之后的问题。
小智 5
我发现这个链接救了我:Working with docker bind mounts and node_modules。此工作解决方案将在 docker 卷管理器中
创建一个“排除”命名卷。卷名称“exclude”是任意的,因此您可以使用卷的自定义名称来代替“ exclude”。
services:
node:
command: nodemon index.js
volumes:
- ./:/usr/local/app/
# the volume above prevents our host system's node_modules to be mounted
- exclude:/usr/local/app/node_modules/
volumes:
exclude:
Run Code Online (Sandbox Code Playgroud)
您可以在官方文档中查看有关卷的更多信息- 使用卷与 docker compose
| 归档时间: |
|
| 查看次数: |
60097 次 |
| 最近记录: |