我有一个像这样的目录结构:
value
其中git diff --unified=0 HEAD~1 HEAD | grep -v -E -f PATTERNS.txt
包含 app 和 www 共有的代码。为app创建图像:
app/
inc/
www/
所以构建的上下文是inc/
的内容。当然,应用程序中将缺少cd app
docker build .
中的代码,它会中断
app/
其中包含inc/
(不错),但也包含其他所有内容(不良内容),例如: WWW
要解决这个问题,我必须构建一个脚本,将docker build -f app/Dockerfile .
的内容复制到inc/
,执行构建和删除inc/
。但那太乱了,实际上,我不能这样做因为我想要 docker-compose 来做我的构建。
管理此内容的推荐方法是什么?
答案 0 :(得分:1)
但也包括其他一切(坏),例如WWW
这就是.dockerignore
file可以派上用场的地方:在其中声明www/
。
在docker CLI将上下文发送到docker守护程序之前,它会在上下文的根目录中查找名为
.dockerignore
的文件。
如果此文件存在,CLI将修改上下文以排除与其中的模式匹配的文件和目录。这有助于避免不必要地将大型或敏感文件和目录发送到守护程序,并可能使用
ADD
或COPY
将它们添加到图像中。
包装docker build或docker compose以生成正确的.dockerignore
将是理想的。
最终,每个构建都应该能够指定自己的dockerignore
文件
见issue 12886。
但是:
此功能已被暂停,等待正在研究/处理的其他更改;其中一个是在发送构建上下文时使构建器“更智能”;见#31829。