如何从命令行临时指定.dockerignore的忽略规则?
嗨,先给你个明确结论:目前Docker官方确实没有提供像--ignore这样的命令行参数,能直接在docker build时指定临时忽略规则,你翻官方文档没找到是正常的~
不过我们可以用几种替代方案来实现类似的效果,下面给你梳理一下:
几种可行的替代方案
1. 临时修改/生成.dockerignore文件
这是最直接的思路,先备份原文件(如果有的话),临时写入你需要的忽略规则,构建完成后再恢复:
# 备份原.dockerignore(如果存在) [ -f .dockerignore ] && cp .dockerignore .dockerignore.bak # 写入临时忽略规则(如果要保留原规则,把>改成>>即可追加) echo "node_modules" > .dockerignore # 执行构建 docker build -t foo . # 恢复原文件(清理临时文件) [ -f .dockerignore.bak ] && mv .dockerignore.bak .dockerignore || rm .dockerignore
2. 用临时目录作为构建上下文
如果不想碰原项目的.dockerignore,可以创建一个临时目录,只复制需要的文件进去,再以这个目录为上下文构建:
# 创建临时目录 TMP_DIR=$(mktemp -d) # 复制当前目录下除了node_modules的所有内容到临时目录 rsync -av --exclude='node_modules' ./ $TMP_DIR/ # 基于临时目录构建镜像 docker build -t foo $TMP_DIR # 构建完成后删除临时目录 rm -rf $TMP_DIR
3. 通过管道传递过滤后的构建上下文(简洁版)
如果你的系统支持tar命令,可以直接打包时排除不需要的文件,再通过管道传给docker build,全程不需要生成临时文件:
# 打包当前目录,排除node_modules,然后传递给docker build tar -c --exclude='node_modules' . | docker build -t foo -
这些方案各有适用场景:临时改.dockerignore适合需要重复用相同规则的情况,tar管道适合一次性快速构建,临时目录则能处理更复杂的过滤需求,你可以根据自己的实际情况选择。
内容的提问来源于stack exchange,提问作者Alexander Mills
相关产品推荐
相关产品推荐

